Для этого вы можете использовать GDB, этим методом .
Ниже приведен пример его использования для оптимизации реально сложной программы.
Вы можете найти «горячие точки», которые вы можете оптимизировать, но больше
как правило, вещи, которые дают вам наибольшую возможность сэкономить время, - это вызовы функций среднего уровня, которых вы можете избежать.
Одним из примеров, скажем, является вызов функции для извлечения информации из базы данных, где функция вызывается несколько раз, когда при некотором дополнительном кодировании можно использовать результат предыдущего вызова.
Часто такие звонки невелики и выглядят невинно, и вы удивляетесь, узнав, сколько они стоят, в общем проценте времени.
Другой пример - выполнение низкоуровневого ввода-вывода, который ускользает от внимания, но на самом деле стоит немалых процентов времени.
Другим примером являются приливные волны уведомлений, которые распространяются от, казалось бы, тривиальных изменений в данных.
Еще одним хорошим инструментом для поиска этих проблем является Zoom .
Вот обсуждение технических вопросов , но в основном то, что нужно искать, это:
Он должен сообщать вам включительно процентов времени, при разрешении на уровне линии , а не только функции.
а) Только знание того, что функция является дорогостоящей, заставляет задуматься, где в ней находятся строки, на которые вам следует обратить внимание.
б) Инклюзивный процент говорит об истинной стоимости линии - сколько итогового времени она несет и не потратила бы, если бы ее не было.
Он должен включать время ввода-вывода (т.е. заблокированное) и время процессора, а не только время процессора. Инструмент, который учитывает только время процессора, не увидит первые две проблемы, упомянутые выше.
Если ваша программа является интерактивной, инструмент должен работать только в течение времени, которое вам нужно, а не в ожидании ввода пользователя. Вы не хотите включать время в голову в статистику производительности вашей программы.