char bytes[0x7FFFFFFF]; /* this? */
int main()
{
return 0;
}
超过2Gb? (如果我计算正确)这是我可以为一个过程保留的最大内存吗?
我在一个32位系统,与4Gb的内存。在不同的系统中,或多或少?
char bytes[0x7FFFFFFF]; /* this? */
int main()
{
return 0;
}
超过2Gb? (如果我计算正确)这是我可以为一个过程保留的最大内存吗?
我在一个32位系统,与4Gb的内存。在不同的系统中,或多或少?
这取决于由:
如果你在win32下运行,你甚至不使用4GB或RAM!
首先,这将取决于许多因素,如平台和平台上的配置。提供给32位进程最大地址空间是通常由其中用户/内核空间分割是,它常常是要么3G/1G或2G/2G(用户/内核)的限制。
现在,可能创建一个这样的数组实际上不会“保留”所有内存。相反,它会被映射到虚拟地址空间,并不会真正开始消耗内存,直到它的访问(见:按需分页)。
此外,请记住,您必须与您的程序中的其他所有内容(包括代码)共享您的地址空间。如果你将所有这些都用于数组,那么代码将会放在哪里?
它** **会预留内存,即使它没有物理实例它的时候了。这叫做委托费。 – 2012-02-02 16:08:08
根据你有多少连续的内存可用,你可以分配多于0x7FFFFFFF字符(不超过2GB,它就在下面)。是的,您可以分配的最大值取决于内存大小。如果你真的需要那么多的内存,你的程序将不能在一台较小的机器上运行。但是你想知道什么?你想做什么? – 2012-02-02 14:14:18
@MrLister - 我想做什么,呵呵。我只是好奇。所以在一台512Mb的机器上,我的程序不能运行?或只是如果我试图访问超过512崩溃? – Fabricio 2012-02-02 14:20:08
然后你可能会遇到的事情,如Linux内存过量使用和“成功”的malloc内存只有用死尖棒子抡了1.4TB块,犯错OOM杀手,当您尝试使用它。 – 2012-02-02 14:50:21