Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить итоговый текст программы? / 10 сообщений из 10, страница 1 из 1
17.01.2018, 18:25
    #39586019
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
В программе используются функции из библиотек С / С++, поэтому не понятно где, например, происходит выделение памяти.

Я с помощью Vtune Amplifier обнаружил, что в моей многопоточной программе основное время занимает оператор new. Хотя появится ему негде (все строки std::string объявляются перед циклом и передаются в функции по ссылкам, а остальные все данные примитивных типов).

Может как- то можно отловить "библиотечные" выделения памяти без результирующего кода?
...
Рейтинг: 0 / 0
17.01.2018, 19:05
    #39586044
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
Присвоение одного объекта другому вызывает конструктор копирования.

P.S. Купите того же Мейерса ([Most] Effective C++) - там всё популярно изложено.
...
Рейтинг: 0 / 0
17.01.2018, 19:08
    #39586045
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
...
Рейтинг: 0 / 0
17.01.2018, 19:18
    #39586051
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
Нашел ошибку! Я вызывал функции:
Код: plaintext
1.
2.
3.
stoi
stol
stoll



передавая char*, поэтому происходило неявное преобразование к std::string (и выделение памяти). Надо было использовать аналоги:
Код: plaintext
1.
2.
3.
atoi
atol
atoll
...
Рейтинг: 0 / 0
17.01.2018, 19:21
    #39586054
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
Про неявное приведение типов у Мейерса тоже есть ...
...
Рейтинг: 0 / 0
18.01.2018, 01:29
    #39586139
Вася Уткин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
AlekseySQLВ программе используются функции из библиотек С / С++, поэтому не понятно где, например, происходит выделение памяти.

Я с помощью Vtune Amplifier обнаружил, что в моей многопоточной программе основное время занимает оператор new. Хотя появится ему негде (все строки std::string объявляются перед циклом и передаются в функции по ссылкам, а остальные все данные примитивных типов).

Может как- то можно отловить "библиотечные" выделения памяти без результирующего кода?
Так а можно же посмотреть дерево вызовов и найти вызовы всех функций которые больше всего потребляют ресурсов, и в Vtune Amplifier, и в MS Visual Studio Profiler:



...
Рейтинг: 0 / 0
18.01.2018, 05:27
    #39586159
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
AlekseySQL,

ещё можно сделать перехват вызова malloc.
...
Рейтинг: 0 / 0
18.01.2018, 19:13
    #39586678
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
Вася Уткин, я так и нашел ошибку (с помощью Vtune Amplifier).

Но все же тут только дерево вызовов. А если у меня какая-то функция вызывается много раз, то какое место вызова "горячее". Если учесть, что в дереве не показываются "промежуточные" по стеку вызовов функции с низкой ценой, то ситуация становится адски запутанной. Или как в моем случае: дерево показывает вызов функции, а ее вообще не должно было вызываться (причем ведь он мне практически на корень показывал, опустив промежуточный процедурный стек...). Вывод: для простоты профилирования надо писать простой код :)

Я привык к транслируемому 1с, в котором показывается время исполнения каждой функции и даже каждой инструкции. Понятное дело, что в скомпилированном коде С++ такого не будет. Но может есть какая-то хитрушка: ведь не зря существует режим сборки "профилирование"... Хотя в инструкции к Vtune Amplifier написано использовать Realese- сборку.
...
Рейтинг: 0 / 0
18.01.2018, 20:46
    #39586717
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
AlekseySQLА если у меня какая-то функция вызывается много раз, то ..
... то сам следи что там происходит.

С/С++ быстры потому что разработчик сам следит чтобы себе в ногу не стрелять. Одного забытого & в параметрах достаточно чтобы словить тормоз на конструкторах копирования.
...
Рейтинг: 0 / 0
19.01.2018, 05:19
    #39586782
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить итоговый текст программы?
AlekseySQLв котором показывается время исполнения каждой функции и даже каждой инструкциисейчас работаю в 17-й студии, там в дебаге тоже показывается время выполнения на каждой строчке. И ещё сбоку какие-то панельки про производительность :) раньше их не было, я ещё не разбирался, висят, рисуют графики какие-то :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить итоговый текст программы? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]