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/