Как работает malloc_info ()? - PullRequest
       13

Как работает malloc_info ()?

7 голосов
/ 11 октября 2010

Я пытался выяснить, как работает функция malloc_info (), расположенная в malloc.h.Я знаю, что вы должны передать его в ФАЙЛ *, и что никакие опции еще не реализованы, но я в недоумении относительно того, что он на самом деле сообщает !?Кроме того, я написал тестовое приложение, которое выделяет целую кучу памяти, и значения, сообщаемые функцией malloc_info (), не меняются, за исключением случаев, когда я выполнил 20 000 однобайтовых распределений?

Есть ли кто-нибудь, кто имеетлюбой опыт работы с malloc_info () и может пролить некоторый свет на то, какие аспекты памяти он должен измерять?

Следует отметить, что я ничего не мог найти в Google о malloc_info (), просто какая-то отрывочная ошибкаreports.

Пример Вывод из malloc_info ():

<malloc version="1">
    <heap nr="0">
        <sizes>
        </sizes>
        <total type="fast" count="0" size="0"/>
        <total type="rest" count="0" size="0"/>
        <system type="current" size="135168"/>
        <system type="max" size="135168"/>
        <aspace type="total" size="135168"/>
        <aspace type="mprotect" size="135168"/>
    </heap>
    <total type="fast" count="0" size="0"/>
    <total type="rest" count="0" size="0"/>
    <system type="current" size="135168"/>
    <system type="max" size="135168"/>
    <aspace type="total" size="135168"/>
    <aspace type="mprotect" size="135168"/>
</malloc>

EDIT:

В качестве дополнительного пояснения;моей резервной позицией является функция mallinfo (), но я надеялся использовать malloc_info (), поскольку, насколько я могу судить, она предназначена для замены mallinfo ().Я обнаружил, что mallinfo () и malloc_info () не работают одинаково.В моих тестах mallinfo () отслеживает все мои выделения, тогда как malloc_info () не делает этого вообще.Я могу только предположить, что malloc_info () в настоящее время не работает или не предназначена для той же цели, что и mallinfo ().

В статье, предоставленной omnifarious, есть веские причины, по которым mallinfo () следует объявить устаревшими.:

совершенно не подходит для 64-битных машин.Типы данных, требуемые спецификацией SysV, не допускают значений больше 2 ^ 31 байт (все поля в структуре являются целыми числами).Вторая проблема заключается в том, что структура данных действительно специфична для реализации malloc, используемой в то время SysV.

Однако я думаю, что в настоящее время malloc_info () еще не готова занять ее место.

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: После еще большего копания кажется, что malloc_info () сообщает размер арены из mallinfo () во всех местах, где появляется 135168 (по крайней мере, это то, что ему соответствует).Это кажется гораздо менее полезным и является очень одномерной информацией по сравнению с тем, что допускает mallinfo ().

Ответы [ 2 ]

1 голос
/ 05 июня 2012

Просто упомянуть, что проект man-pages для Linux предоставляет man-страницу для malloc_info начиная с версии 3.41:

http://man7.org/linux/man-pages/man3/malloc_info.3.html

1 голос
/ 11 октября 2010

Большие выделения обычно обрабатываются простым сообщением операционной системы «Мне нужно х количество страниц памяти», часто mmap ing /dev/zero. Распределения размером более страницы или 4 (страница обычно занимает 4096 байт) обычно обрабатываются таким образом, и эти распределения не являются вещами, которые я ожидаю отследить с помощью диагностики malloc.

К сожалению, я не знаю ничего больше, чем кто-либо другой о malloc_info. Пост LJ об удалении mallinfo (среди прочего) Ульрихом Дреппером, нашим бесценным автором glibc, кажется лучшей доступной информацией, и это чертовски тонко, и то, что вы, вероятно, вероятно в любом случае найден в Google.

Программа , которую я вставил на paste.lisp.org , должна выполнить malloc через все шаги и распечатать информацию о куче. Это очень специфично для Linux и gcc, но, конечно же, и этот вопрос. Возможно, поиграв с выводом тестовой программы, вы поймете, о чем идет речь.

...