Базовая статистика использования "кучи" в GCC на 64-разрядной платформе

Я должен ответить на основной вопрос из своей программы C, скомпилированной GCC для Linux: сколько из "кучи" процесса используется в настоящее время (выделенный malloc) и сколько находится если свободные блоки "кучи". Реализация GNU стандартной библиотеки имеет mallinfo функция, которая сообщает точно, в чем я нуждаюсь, но это только применимый с 32-разрядными конфигурациями и, AFAIK, нет никакого 64-разрядного эквивалента той функциональности (BTW, кто-либо знает почему?).

Я использую GCC на Linux, таким образом, мне нужно это для Linux. Но я предполагаю, что "куча" непрозрачна к системе, таким образом, единственный способ ответить на этот вопрос состоит в том, чтобы использовать средства, обеспеченные реализацией стандартной библиотеки.

В реализации MSVC на платформе Windows нет никакого эквивалента mallinfo функционируйте, но существует так называемая функциональность обхода "кучи", которая позволяет вычислять необходимую информацию путем итерации через все блоки в "куче". AFAIK, в библиотеке GNU C нет никакого интерфейса обхода "кучи". (Есть ли?).

Так, снова, что я делаю в GCC? Это не должно быть эффективно, означая, что вышеупомянутый основанный на обходе "кучи" подход работал бы превосходный на меня. Как я узнаю, сколько "кучи" используется и сколько свободно в GCC? Я могу, вероятно, попытаться установить malloc-рычаги и "вручную" отследить размеры, хотя я не уверен, как определить текущий размер арены "кучи" (см. mallinfo.arena) без использования mallinfo.

8
задан AnT 9 May 2010 в 16:58
поделиться

1 ответ

Эта ветка из 2004 с участием ключевых разработчиков glibc указывает, что, поскольку интерфейс уже "... не подходит для реализации вообще. ", не было смысла делать 64-битную чистую версию. (Интерфейс mallinfo () не был разработан для glibc - он рассматривался для включения в SUS ).

В зависимости от того, что вы пытаетесь сделать с информацией, вы можете использовать malloc_stats () , который просто выдает вывод при стандартной ошибке - поскольку это просто текстовый вывод, который можно изменить на соответствовать внутренней реализации malloc () , и поэтому, по крайней мере, будет иметь преимущество получения разумных результатов.

3
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: