只是为了测试,我跑这个代码如何限制我的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