为了测试,我运行了以下代码
#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;行导致分段错误。
我想限制内存分配通过我的程序,但也不想绑定我的程序静态。
例如,
,是否有一种方法可以告诉我的程序使用系统上最多一半的可用内存(运行二进制文件的系统),但是没有更多的?。
因此,如果我的程序在内存为8GB的机器上运行,它可以使用最大4GB的内存,但是如果程序运行在256 my的机器上,程序应该只有128 my可用。
另外,我希望在我的程序中这样做,而不是使用一些外部实用程序来控制可用的内存量。
发布于 2010-09-27 03:41:06
通常认为程序试图检测机器上的物理内存量并使用其中的某一部分是滥用的。如果10个程序都认为自己有权使用机器内存的一半,该怎么办?
处理海量数据的一种更好的方法是在磁盘上处理它,并依靠操作系统的文件系统缓存以对多个进程公平的方式优化使用机器的物理内存。
发布于 2012-02-08 22:23:39
我很惊讶没有人提到ulimit,这是在UNIX平台上使用的方式。
如果您想要编程解决方案,请使用自定义函数包装malloc()和free()调用,并跟踪您已经分配了多少内存。拥有用户可以设置的命令行参数(或环境变量、配置文件设置等),以允许用户决定允许程序使用多少RAM。
发布于 2010-09-26 11:34:37
如果您在Linux上,您可以在启动时解析文件/proc/meminfo,以找出系统有多少内存:
$ cat /proc/meminfo
MemTotal: 505872 kB
MemFree: 70332 kB
...https://stackoverflow.com/questions/3797571
复制相似问题