如何申请4G的内存空间?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tonglin12138/article/details/85457009

在探讨这个问题之前,我们需要认识到机器的内存分布。
因为Windows下的机器内存分布模型我们不清楚。所以我们在这里讨论的是Linux下的4G内存空间的申请。

假如我们现在的Linux一共有4G的内存空间。那么它有1G是供操作系统内核使用的。也就是说我们程序最多只能申请到3G的空间,事实上,我们最大申请到的空间也就2G左右。

如果是32位的程序,在vs下你可以试一试,是不能申请到4G空间的;

#include<iostream>
using namespace std;
int main()
{
   
   void* p = new char[0xfffffffful];
   cout << "new:" << p << endl;
   return 0;

}
//试一试?

*如果在平台上将程序改为64位,那么意味着程序的虚拟空间为4G*4G,就可以申请了。*
(PS:程序位数依赖于机器位数);

不要疑问4G*4G空间,我们知道虚拟地址空间和物理地址空间之间有一种映射关系,我们能申请到并不意味着物理地址真的有这么大。你想,我们申请到的4G空间并不是说需要一下子需要这么大,只是说可以满足我们4G的需求就可以了,所以当你用到的地方才会真的申请空间,一旦哪一部分释放空间了,就会把前边释放的空间再拿过来用(读者可以想象这个过程)。

猜你喜欢

转载自blog.csdn.net/tonglin12138/article/details/85457009
今日推荐