gpt4 book ai didi

c - 当仍有大量交换空间时,malloc 失败

转载 作者:IT王子 更新时间:2023-10-29 00:50:19 26 4
gpt4 key购买 nike

为了测试内存不足行为,我使用 GCC 4.7.1 在 32 位 Linux 3.2 上编译了以下 C 程序,没有任何编译器标志:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
while (malloc(4096)) ;
printf("%s", strerror(errno));
return 0;
}

当我运行该程序时,我发现在分配了大约 2.5 GB 的驻留内存后,malloc 失败(“无法分配内存”)。

机器有 2GB 的物理内存和 4GB 的交换空间。在程序运行期间没有观察到内核消息。

那么为什么 Linux 停止分配内存?

相关问题:maximum memory which malloc can allocate ,但它没有解决 Linux 的具体问题。

最佳答案

您机器中的物理内存量与malloc 的语义无关。一个进程有一个固定的虚拟地址空间(对于 32 位进程通常是 2GB)。 malloc 的实现将返回地址,直到用完虚拟地址空间而不是物理 RAM。

这里有更详细的讨论

http://en.wikipedia.org/wiki/Virtual_address_space

关于c - 当仍有大量交换空间时,malloc 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935873/

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