代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

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

  •  1
  • Aakash Goel  · 技术社区  · 15 年前

    #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;
    }
    

    内存使用情况图表是这样的(底部粉红色的图表跟踪内存)。

    alt text

    虽然这个程序没有耗尽内存,但是任何更多的内存需求都会导致 malloc 失败,然后由于 ar[i][123] = 456;

    我想通过我的程序限制内存分配,但也不想静态绑定我的程序。

    例如,

    另外,我想在我的程序中实现这一点,而不是使用一些外部实用程序来控制可用的内存量。

    3 回复  |  直到 15 年前
        1
  •  2
  •   R.. GitHub STOP HELPING ICE    15 年前

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

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

        2
  •  2
  •   mpontillo    14 年前

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

    malloc() free() 使用自定义函数调用,并跟踪已分配的内存量。有一个用户可以设置的命令行参数(或环境变量、配置文件设置等),允许用户决定允许程序使用多少RAM。

        3
  •  0
  •   John Carter    15 年前

    如果你在Linux上,你可以解析这个文件 /proc/meminfo

    $ cat /proc/meminfo
    MemTotal:         505872 kB
    MemFree:           70332 kB
    ...