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

时间:2012-02-02 14:09:13

标签: c memory-management

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

int main()
{
    return 0;
}

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

我使用的是32位系统,内存为4Gb。在一个或多或少的不同系统中?

2 个答案:

答案 0 :(得分:1)

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

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

另外,请记住,您必须与程序中的其他所有内容共享地址空间,包括代码。如果你用数组消耗了所有这些,你的代码将在哪里?

答案 1 :(得分:0)

取决于:

  • 编译器
  • 系统
  • 操作系统

如果你在win32上运行,你甚至不使用4GB或RAM!