Я профилирую память большого сервиса C++, используя очиститель адресов, в частности его функцию __sanitizer_print_memory_profile. После вызова этой функции я смотрю на напечатанные трассировки выделения и среди «обычных» трассировок (например, main -> foo ->operator new -> malloc) вижу вот это:
Код: Выделить всё
259188664 bytes (38%) in 31679 allocations
#0 0x00000092b40b in malloc ../../.././libsanitizer/asan/asan_malloc_linux.cpp:67
#1 0x000002447f0b in operator new(unsigned long) ../../.././libstdc++-v3/libsupc++/new_op.cc:50
Это вся трассировка. New назывался «из ниоткуда», что затем вызывало malloc 31 679 раз. Всего было выделено 259 МБ. Стоит отметить, что очиститель адресов показывает только «живые» выделения. Те, которые выделены, но не освобождены.
Может кто-нибудь объяснить, что происходит? Как найти код, который отображает выделение?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ry-profile