我想明白爲什麼數據動態分配被多次使用比代碼直接指定或與malloc
單個呼叫分配一個這麼多的內存。內存分配和進程的內存使用
作爲實例,我提出了以下兩個代碼,在C:
test1.c:INT x被與malloc
int main (void)
{
int *x;
int i, n=1048576; //n=1024*1024;
printf("size = %lu\n", n* sizeof(int));
for(i=0; i<n; i++)
{
x = malloc(sizeof(int));
*x=i;
}
printf("Look at top and then press something to finish.");fflush(stdout);
getc(stdin);
return 0;
}
分配我沒有使用免費在這裏保持簡單。 當程序正在等待的互動,我期待在另一個終端上的功能,它顯示了我:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1384 root 20 0 41300 34076 1300 S 0.0 3.3 0:00.47 test1
test2.c中:INT X不是動態分配
int main (void)
{
int x[1048576]; //x[1024*1024]
int i, n=1048576;
printf("size = %lu\n", n* sizeof(int));
for(i=0; i<n; i++)
{
x[i]=i;
}
printf("Look at top and then press something to finish.");fflush(stdout);
getc(stdin);
return 0;
}
和頂級顯示我:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1352 root 20 0 12404 5500 1304 S 0.0 0.5 0:00.05 test2
我也做了一個第三碼,也有相同的結果是test2的,在這裏我使用:
x = malloc(n*sizeof(int));
for(i=0; i<n; i++)
{
x[i]=i;
}
爲什麼在內存使用過程中有這麼多差異?這是因爲malloc請求新的內存頁面,並有內存被浪費?或malloc
分配更多的內存?
test1使用3.3%的總內存和test2使用0.5%。
環境:
我執行這些測試在CentOS 5 64位內部搬運工。在虛擬環境
內存:
$ free -m
total used free shared buff/cache available
Mem: 995 98 845 3 51 808
Swap: 1162 194 967
[Malloc vs自定義分配器可能重複:Malloc有很多開銷。爲什麼?](http://stackoverflow.com/questions/13064850/malloc-vs-custom-allocator-malloc-has-a-lot-of-overhead-why) –
看看這個答案: http:///stackoverflow.com/questions/10540845/linux-heap-structure-and-the-behaviour-with-malloc-and-free – JurekM
這與'malloc vs自定義分配器'有關,但不完全相同。 –