Как узнать, что выделил данный кусок памяти?

0

Я хотел бы знать, как, учитывая любой кусок памяти, как экземпляр класса или std::vector, я могу определить, какая функция (которая, вероятно, из семейства функций * alloc) распределяет эту заданную часть памяти или еще лучше, когда вызов new или allocator, если он используется, создал это адресное пространство в моем приложении.

  • 0
    Из коробки это невозможно. Вы можете создать свою собственную схему размещения, которая отслеживает это.
  • 0
    Вы в значительной степени должны написать распределитель, чтобы он выделял некоторое дополнительное пространство и записывал данные в эту память, чтобы идентифицировать распределитель (например, адрес распределителя).
Показать ещё 12 комментариев
Теги:
memory-management

2 ответа

2

Распределитель памяти C/C++ не отслеживает эту часть данных - он отслеживает только размер каждой выделенной области. Невозможно узнать, кто его выделил.

Если вы хотите получить более конструктивный ответ, вам нужно будет рассказать нам, чего вы пытаетесь достичь. Если целью является отладка вашего кода, то вы должны использовать сторонний отладчик памяти - valgrind, вероятно, лучший из доступных сейчас.

  • 0
    есть одна большая проблема с valgrind поэтому я больше не использую его сейчас, когда у меня есть дезинфицирующие средства почти для всего, что я могу отлаживать заранее; Все, что делает valgrind , это происходит из-за обратного инжиниринга, а не потому, что он опирается на какой-то конкретный ABI / формат файла, такой как DWARF, который предоставляет точную и точную информацию отладки.
0

Есть некоторые инструменты для профилирования, такие как strace, который показывает вам вызываемые функции.

  • 0
    это эквивалент «образованного предположения», в многопоточном или параллельном доступе к миру это будет просто беспорядок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню