2012-02-02 87 views
0
char bytes[0x7FFFFFFF]; /* this? */ 

int main() 
{ 
    return 0; 
} 

超过2Gb? (如果我计算正确)这是我可以为一个过程保留的最大内存吗?

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

+0

根据你有多少连续的内存可用,你可以分配多于0x7FFFFFFF字符(不超过2GB,它就在下面)。是的,您可以分配的最大值取决于内存大小。如果你真的需要那么多的内存,你的程序将不能在一台较小的机器上运行。但是你想知道什么?你想做什么? – 2012-02-02 14:14:18

+0

@MrLister - 我想做什么,呵呵。我只是好奇。所以在一台512Mb的机器上,我的程序不能运行?或只是如果我试图访问超过512崩溃? – Fabricio 2012-02-02 14:20:08

+0

然后你可能会遇到的事情,如Linux内存过量使用和“成功”的malloc内存只有用死尖棒子抡了1.4TB块,犯错OOM杀手,当您尝试使用它。 – 2012-02-02 14:50:21

回答

0

这取决于由:

  • 编译
  • 系统
  • 操作系统

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

1

首先,这将取决于许多因素,如平台和平台上的配置。提供给32位进程最大地址空间是通常由其中用户/内核空间分割是,它常常是要么3G/1G或2G/2G(用户/内核)的限制。

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

此外,请记住,您必须与您的程序中的其他所有内容(包括代码)共享您的地址空间。如果你将所有这些都用于数组,那么代码将会放在哪里?

+0

它** **会预留内存,即使它没有物理实例它的时候了。这叫做委托费。 – 2012-02-02 16:08:08

相关问题