c - 这是我可以为进程保留的最大内存吗?

标签 c memory-management

char bytes[0x7FFFFFFF]; /* this? */

int main()
{
    return 0;
}

超过 2Gb? (如果我计算正确的话)

我使用的是 32 位系统,内存为 4Gb。在不同的系统中会更多还是更少?

最佳答案

首先,这将取决于许多因素,例如平台甚至平台上的配置。 32 位进程可用的最大地址空间通常受到用户/内核空间划分位置的限制,通常是 3G/1G 或 2G/2G(用户/内核)。 p>

现在,创建这样的数组可能实际上不会“保留”所有内存。相反,它会被映射到虚拟地址空间,并且在被访问之前不会真正开始消耗内存(请参阅:按需分页)。

此外,请记住,您必须与程序中的其他所有内容(包括代码)共享地址空间。如果您使用数组消耗所有这些,您的代码会去哪里?

关于c - 这是我可以为进程保留的最大内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113745/

相关文章:

c - 使用递归函数来计算字母的出现次数

c - C语言中如何将两个字符串的字符随机组合在一起?

c - 在C语言游戏中使用鼠标控制

objective-c - 为什么要保留静态变量?

c - Stack 和 Heap 中的内存分配

ios - Xcode:在ARC中编译.c文件?

c - float 组的总和返回不同的结果

c - Arduino编译器在C库中找不到已实现的方法

android - 在内存中加载大字符串的问题

ios - ARC 对网点和网点集合的弱引用和强引用?