gpt4 book ai didi

linux - 我可以在 Linux 上用完虚拟内存吗?

转载 作者:IT王子 更新时间:2023-10-29 00:51:40 24 4
gpt4 key购买 nike

我的应用类似于假设程序:

for(;;) {
for (i=0; i<1000; i++) {
p[i] = malloc(random_number_between_1000_and_100000());
p[i][0]=0; // update
}
for (i=0; i<1000; i++) {
free(p[i]);
}
}

没有内存泄漏,但在我的系统上,内存消耗(顶部,VSS 列)无限制地增长(例如可用物理内存的 300%)。这正常吗?

已更新 - 使用内存一段时间然后释放它。这有区别吗?

最佳答案

行为正常。引用 man 3 malloc:

错误

默认情况下,Linux 遵循乐观的内存分配策略。这意味着当 malloc() 返回非 NULL 时,不能保证 内存确实可用。这是一个非常糟糕的错误。万一发现系统内存不足,一个或多个进程将被 被臭名昭著的OOM killer 杀死。如果在不太希望突然随机丢失一些东西的情况下使用 Linux 选择的进程,而且内核版本足够新,可以使用如下命令关闭这种过度使用行为:

       # echo 2 > /proc/sys/vm/overcommit_memory

另请参阅内核文档目录、文件 vm/overcommit-accounting 和 sysctl/vm.txt。

您需要触摸(读/写)Linux 内核的内存才能实际保留它。

关于linux - 我可以在 Linux 上用完虚拟内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804026/

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