gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:07 27 4
gpt4 key购买 nike

为了测试,我运行了这段代码

#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 而导致段错误; 行。

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

For example, Is there a way to tell my program to use atmost half of the memory available on the system (the system where the binary was run), but no more?

因此,如果我的程序在具有 8GB 内存的机器上运行,它最多可以使用 4GB,但如果程序在具有 256MB 的机器上运行,则程序应该只有 128MB 可用。

此外,我想在我的程序中执行此操作,而不是使用某些外部实用程序来控制可用内存量。

最佳答案

通常认为程序试图检测机器上的物理内存量并使用其中的特定部分是滥用行为。如果 10 个程序每个认为它们有权使用机器内存的一半会怎么样?

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

关于c - 如何限制我的 C 代码可访问的内存量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3797571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com