首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制我的C代码可以访问的内存量?

问如何限制我的C代码可以访问的内存量?
EN

Stack Overflow用户
提问于 2010-09-26 11:27:55
回答 3查看 388关注 0票数 1

为了测试,我运行了以下代码

代码语言:javascript
复制
#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可用。

另外,我希望在我的程序中这样做,而不是使用一些外部实用程序来控制可用的内存量。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-27 03:41:06

通常认为程序试图检测机器上的物理内存量并使用其中的某一部分是滥用的。如果10个程序都认为自己有权使用机器内存的一半,该怎么办?

处理海量数据的一种更好的方法是在磁盘上处理它,并依靠操作系统的文件系统缓存以对多个进程公平的方式优化使用机器的物理内存。

票数 2
EN

Stack Overflow用户

发布于 2012-02-08 22:23:39

我很惊讶没有人提到ulimit,这是在UNIX平台上使用的方式。

如果您想要编程解决方案,请使用自定义函数包装malloc()和free()调用,并跟踪您已经分配了多少内存。拥有用户可以设置的命令行参数(或环境变量、配置文件设置等),以允许用户决定允许程序使用多少RAM。

票数 2
EN

Stack Overflow用户

发布于 2010-09-26 11:34:37

如果您在Linux上,您可以在启动时解析文件/proc/meminfo,以找出系统有多少内存:

代码语言:javascript
复制
$ cat /proc/meminfo
MemTotal:         505872 kB
MemFree:           70332 kB
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3797571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档