Я программирую на C ++ (на Linux), и недавно я начал использовать Valgrind / Callgrind для оптимизации моего кода. После прочтения пары учебных пособий кажется, что сосредоточиться на функциях с самой высокой «собственной» ценой - хорошая идея.
Я нашел две функции с высокой себестоимостью (обе они называются> 1M раз и имеют> 10% самостоятельной Стоимость каждого, относительно всего времени выполнения программы). В kcachegrind он показывает:
Callgrind, однако, не говорит мне, какая часть функции компенсирует эту себестоимость, что затрудняет оптимизацию код. Что такое себестоимость и как я могу попытаться уменьшить ее?
Насколько я понимаю, догадка состоит в том, что себестоимость включает в себя чтение / запись данных, ошибки кэширования, базовые c математические операции, копирование объектов в стеке (включая аргументы функции), et c. Как мне узнать, что это такое, прежде чем я могу обратиться к нему?
Спасибо