1. 程式人生 > >如何申請4G的記憶體空間?

如何申請4G的記憶體空間?

在探討這個問題之前,我們需要認識到機器的記憶體分佈。
因為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的需求就可以了,所以當你用到的地方才會真的申請空間,一旦哪一部分釋放空間了,就會把前邊釋放的空間再拿過來用(讀者可以想象這個過程)。