Если вы работаете в Intel, я думаю, что функция Intel PT, упомянутая в других ответах, в сочетании с постобработкой и анализом, скорее всего, даст вам то, что вы хотите при высокой скорости (то есть что-то вроде регрессия одной цифры в производительности).
Если вы не заботитесь о производительности, вы можете использовать любое количество бинарных инструментальных сред для получения этой информации. Например, инфраструктура valgrind имеет инструмент cachegrind , который фиксирует каждый доступ к памяти и использует их для оценки поведения кэша на основе идеализированной модели кэширования.
Вы можете в значительной степени модифицировать инструмент cachegrind, чтобы выкладывать список обращений, к которым вы обращаетесь, вместе с отметкой времени. Конечно, проблема в том, что cachegrind, вероятно, работает примерно в 10 раз медленнее, чем собственное приложение, поэтому ваши временные метки будут «растянуты» и искажены (то есть, потому что разные части программы могут иметь разные накладные расходы на инструментарий).
Вопрос о том, имеет ли значение ваше заявление, зависит от вас.
Приятной особенностью Valgrind является то, что он не зависит от какого-либо конкретного оборудования и работает на разных аппаратных архитектурах. Вероятно, это также проще, чем заставить работать анализ на базе Intel PT - хотя я не уверен на 100%, так как попробовал сам.
Если вы не заботитесь об общем времени выполнения реального процесса во время записи, но вам нужны в основном точные временные показатели, вы также можете рассмотреть возможность запуска процесса под имитатором ЦП, таким как Sniper x86 simulator или gem5 , которые Питер упоминает в комментариях.
Этот сайт , который описывает инструмент CMP $ im, может быть очень полезным для вас. Он может производить трассировку обращений с помощью технологии Intel PIN , которую @Leeor также упомянул в комментариях ниже. Я рекомендую взглянуть на статьи автора, связанные с этого сайта.