Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
В программе используются функции из библиотек С / С++, поэтому не понятно где, например, происходит выделение памяти. Я с помощью Vtune Amplifier обнаружил, что в моей многопоточной программе основное время занимает оператор new. Хотя появится ему негде (все строки std::string объявляются перед циклом и передаются в функции по ссылкам, а остальные все данные примитивных типов). Может как- то можно отловить "библиотечные" выделения памяти без результирующего кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 18:25 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
Присвоение одного объекта другому вызывает конструктор копирования. P.S. Купите того же Мейерса ([Most] Effective C++) - там всё популярно изложено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 19:05 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 19:08 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
Нашел ошибку! Я вызывал функции: Код: plaintext 1. 2. 3. передавая char*, поэтому происходило неявное преобразование к std::string (и выделение памяти). Надо было использовать аналоги: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 19:18 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
Про неявное приведение типов у Мейерса тоже есть ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 19:21 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLВ программе используются функции из библиотек С / С++, поэтому не понятно где, например, происходит выделение памяти. Я с помощью Vtune Amplifier обнаружил, что в моей многопоточной программе основное время занимает оператор new. Хотя появится ему негде (все строки std::string объявляются перед циклом и передаются в функции по ссылкам, а остальные все данные примитивных типов). Может как- то можно отловить "библиотечные" выделения памяти без результирующего кода? Так а можно же посмотреть дерево вызовов и найти вызовы всех функций которые больше всего потребляют ресурсов, и в Vtune Amplifier, и в MS Visual Studio Profiler: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 01:29 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, ещё можно сделать перехват вызова malloc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 05:27 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, я так и нашел ошибку (с помощью Vtune Amplifier). Но все же тут только дерево вызовов. А если у меня какая-то функция вызывается много раз, то какое место вызова "горячее". Если учесть, что в дереве не показываются "промежуточные" по стеку вызовов функции с низкой ценой, то ситуация становится адски запутанной. Или как в моем случае: дерево показывает вызов функции, а ее вообще не должно было вызываться (причем ведь он мне практически на корень показывал, опустив промежуточный процедурный стек...). Вывод: для простоты профилирования надо писать простой код :) Я привык к транслируемому 1с, в котором показывается время исполнения каждой функции и даже каждой инструкции. Понятное дело, что в скомпилированном коде С++ такого не будет. Но может есть какая-то хитрушка: ведь не зря существует режим сборки "профилирование"... Хотя в инструкции к Vtune Amplifier написано использовать Realese- сборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 19:13 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLА если у меня какая-то функция вызывается много раз, то .. ... то сам следи что там происходит. С/С++ быстры потому что разработчик сам следит чтобы себе в ногу не стрелять. Одного забытого & в параметрах достаточно чтобы словить тормоз на конструкторах копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:46 |
|
||
|
Как получить итоговый текст программы?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLв котором показывается время исполнения каждой функции и даже каждой инструкциисейчас работаю в 17-й студии, там в дебаге тоже показывается время выполнения на каждой строчке. И ещё сбоку какие-то панельки про производительность :) раньше их не было, я ещё не разбирался, висят, рисуют графики какие-то :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 05:19 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017995]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 303ms |
| total: | 455ms |

| 0 / 0 |
