我有一個大型數組,我使用realloc()擴展它,並使用valgrind來查看內存使用情況。valgrind報告奇怪的內存使用情況
這裏是最小的例子:
#include <stdlib.h>
#include <stdio.h>
#define PASSES 1024 * 2
#define MEMTOALLOC 1024 * 1024
int main(void) {
void *remem = NULL;
void *newmem;
const unsigned int chunk = MEMTOALLOC/PASSES;
unsigned int i;
for(i = 0; i < PASSES; i++){
const unsigned int size = (i + 1) * chunk;
newmem = realloc(remem, size);
if (newmem == NULL){
printf("No memory!\n");
exit(1);
}
remem = newmem;
if (i % 1000 == 0)
printf("%10u processed\n", i);
}
free(remem);
}
如果道次1,程序立刻realloc的一切,Valgrind的報告:
total heap usage: 1 allocs, 1 frees, 1,048,576 bytes allocated
如果道次100,逐步與100個reallocs和Valgrind的程序的realloc報告:
total heap usage: 100 allocs, 100 frees, 52,949,250 bytes allocated
如果我做PASSES 1024,我會得到巨大的消耗:
total heap usage: 1,024 allocs, 1,024 frees, 537,395,200 bytes allocated
這是什麼內存使用情況的解釋?
您還沒有任何代碼。你沒有任何問題。您希望在回覆您的帖子時看到什麼? –
代碼並不是真的需要,但我會編輯我的問題。 – Nick
這種情況下,您可以通過嘗試創建** [MCVE](http://stackoverflow.com/help/mcve)**來解決自己的問題。 – user3386109