Я хотел бы знать, как, учитывая любой кусок памяти, как экземпляр класса или std::vector
, я могу определить, какая функция (которая, вероятно, из семейства функций * alloc) распределяет эту заданную часть памяти или еще лучше, когда вызов new
или allocator
, если он используется, создал это адресное пространство в моем приложении.
Распределитель памяти C/C++ не отслеживает эту часть данных - он отслеживает только размер каждой выделенной области. Невозможно узнать, кто его выделил.
Если вы хотите получить более конструктивный ответ, вам нужно будет рассказать нам, чего вы пытаетесь достичь. Если целью является отладка вашего кода, то вы должны использовать сторонний отладчик памяти - valgrind, вероятно, лучший из доступных сейчас.
valgrind
поэтому я больше не использую его сейчас, когда у меня есть дезинфицирующие средства почти для всего, что я могу отлаживать заранее; Все, что делает valgrind
, это происходит из-за обратного инжиниринга, а не потому, что он опирается на какой-то конкретный ABI / формат файла, такой как DWARF, который предоставляет точную и точную информацию отладки.
Есть некоторые инструменты для профилирования, такие как strace, который показывает вам вызываемые функции.