Я использую valgrind, чтобы проверить, что моя программа находится в пределах требуемой границы памяти для класса. Когда я запускаю массив, я получаю симпатичную диаграмму, в которой говорится, что максимальное использование памяти (куча + стек) составляет 21 КБ. Когда я запускаю memcheck valgrind, он говорит мне, что я выделил 185931 байт. В чем разница в том, что они сообщают? Если это имеет значение, в моем коде есть шаг, в котором я пишу две строки, поэтому я изменяю размер первого с помощью realloc, strcat две строки, а затем освобождаю второй.В чем разница между количеством памяти массива и количеством памяти memcheck?
ответ
Memcheck предназначен для поиска утечек памяти, поэтому он подсчитывает общее количество всех распределений памяти (и общее количество всех разрядов).
Massif предназначен для просмотра памяти в памяти программы, поэтому он подсчитывает общую память, используемую в каждой точке программы.
Другими словами, если ваша программа выглядит следующим образом:
int main(void)
{
free(malloc(10*1024));
free(malloc(10*1024));
return 0;
}
Тогда Memcheck скажет вам:
total heap usage: 2 allocs, 2 frees, 20,480 bytes allocated
В то время как массив будет сказать вам это:
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 130,386 10,248 10,240 8 0
2 131,436 10,248 10,240 8 0
99.92% (10,240B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->99.92% (10,240B) 0x8048407: main (in /home/kevin/miscdev/so/x)
(На протяжении жизни программы было выделено 20480 байт, но пиковое использование составляло всего 10240 байт).
Для любых будущих зрителей memcheck считает realloc свободным, а затем malloc до его подсчётов free/free, предположительно независимо от реализации realloc. (Я подозреваю, что он захватывает вызов realloc, увеличивает количество отсчетов, а затем вызывает «реальный» realloc, но я не уверен на это на 100%.) – AVB
- 1. В чем разница между количеством и длиной?
- 2. В чем разница между размером и количеством в пандах?
- 3. разница между количеством тиков и знаками
- 4. В чем разница между «количеством проб» и «количеством ставок» в моделировании руин Игрока?
- 5. Разница между большим количеством строк
- 6. Разница между распределением памяти и распределением памяти для массива
- 7. Утечка памяти с большим количеством строк журнала SQL в памяти
- 8. Распределение памяти с неизвестным количеством элементов
- 9. ASP.NET приложение с большим количеством памяти - утечка?
- 10. В чем разница в кэш-памяти и плотно связанной памяти
- 11. Разница между указателем и массивом в памяти
- 12. В чем разница между распределением памяти через новый и распределителем
- 13. В чем разница между фиксацией и блокировкой виртуальной памяти?
- 14. В чем разница между уничтожением объектов и освобождением связанной памяти
- 15. В чем разница между tcmalloc/jemalloc и пулом памяти
- 16. В чем разница между DMA и IO с отображением памяти?
- 17. В чем разница между распределением памяти и сборкой мусора, пожалуйста?
- 18. dygraphs Несоответствие между количеством меток и количеством столбцов в массиве
- 19. В чем разница между этими двумя методами выделения памяти?
- 20. Разница между производителем и количеством потребителей в tibco admin
- 21. Разница между командой count и реальным количеством строк в mysql
- 22. Android ListView с большим количеством данных - ошибка из памяти
- 23. разница между распределением кортежей памяти и нормальным переменным распределением памяти
- 24. В чем разница между несколькими методами выделения памяти в C++?
- 25. Разница между количеством возвращаемых строк и количеством этих строк при использовании
- 26. Разница между моделью плоской памяти и моделью защищенной памяти?
- 27. В чем разница между малой моделью памяти и большой моделью памяти?
- 28. В чем разница между инструментами анализа памяти Java и инструментами обнаружения утечки памяти?
- 29. Разница в производительности запросов Sql между количеством строк в лимитах
- 30. Mysql - баланс между количеством
Я думаю, memcheck подсчитывает общую сумму ассигнований. Если вы освободите память и выделите новую, она будет учитываться в memcheck, но, возможно, массив только измеряет фактическое физическое количество пространства, которое было необходимо в любой момент ... (но я не уверен в этом). –