2012-02-02 49 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

相關問題