只是爲了測試,我跑這個代碼如何限制我的C代碼可訪問的內存量?
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main() {
int **ar = (int**) malloc(100000000* sizeof(int*));
int i;
for(i = 0; i<10000000; i++) {
ar[i] = (int*) malloc(1000 * 4);
ar[i][123] = 456;
}
usleep(3000000); usleep(3000000);
usleep(3000000); usleep(3000000);
usleep(3000000); usleep(3000000);
return 0;
}
內存使用率曲線圖是這樣進行的(底部粉紅色的曲線軌跡記憶)。
雖然這個程序沒有用完的內存,更多的內存需求會導致malloc
失敗,然後分割故障由於ar[i][123] = 456;
線。
我想通過我的程序來限制內存分配,但也不想靜態綁定我的程序。
例如,有沒有辦法告訴我的程序使用atmost一半的存儲系統(其中二是運行系統)上可用,但沒有更多?
所以,如果我的程序的機器上8GB的內存運行,它可以使用4GB的最大值,但如果程序有256MB的機器上運行,只有128MB應該是對程序可用。
此外,我想從我的程序中這樣做,而不是控制使用某些外部實用程序的可用內存量。
我同意,在這種情況下,對於有多少內存「沒問題」做出不合格的猜測是沒有意義的。 – 2010-09-27 06:29:28