TCMalloc - получить размер выделения для указателя

Используя TCMalloc - данный объект, выделенный в куче, есть ли способ получить выделенный размер объекта (имеется в виду только размер, переданный в вызове malloc)? Я прошу "надежный" метод (т.е. не возвращать размер слова назад, предполагая, что размер выделения сохранен перед указателем)

1 ответ

Решение

Начиная с версии 1.6, TCMalloc включает в себя:

size_t tc_malloc_size(void*);

который возвращает полезный размер выделения, начиная с аргумента.

Это идентично glibc malloc_usable_size (или BSD malloc_size), а также libtcmalloc включает псевдонимы для обеих этих функций.

Тем не менее, это не обязательно первоначально запрошенный размер. Это может быть больше (и обычно есть). Я не верю, что TCMalloc (или большинство других реализаций malloc) сохраняют эти метаданные, поэтому (afaik) нет ни надежного, ни ненадежного механизма возврата во времени к исходному вызову malloc и проверки размера запроса.

Другие вопросы по тегам