假設我有一個大小爲78719476736字節的數組。請注意,這個數組是在我的C代碼中使用malloc動態分配的。假設malloc在分配這麼多內存之後返回一個有效的指針。該數組的大小大於UINT_MAX(4294967295),即無符號整數(32位)的最大極限。在C中訪問大於UINT_MAX * 4大小的內存?
假設我的代碼看起來像下面的例子。
int *buf;
buf = (int*)malloc(78719476736);
這裏78719476736大於4 * UINT_MAX。
現在,如果我必須引用buf的所有元素,那麼因爲buf是int *,它將是32位,所以它將無法處理所有使用malloc分配的內存元素(78719476736字節)。
我的問題是不應該改變上面的代碼來使buf長long(64位變量),因爲只有long long變量才能夠解決我分配的大內存。
已更改的代碼例如
unsigned long long int buf;
buf = (unsigned long long int*)malloc(78719476736);
事實上,我認爲,可變的buf不應該是一個指針任何更多的任何指針將是32位寬的,因此它不會能夠訪問78719476736個字節。
所以它應該是一個普通的無符號long long int,我必須將malloc返回指針值轉換爲一個無符號long long int,如上面更改後的代碼所示,並使用buf訪問所有分配的元素。
我在上面的假設中正確嗎?
或
我是不是迷惑/錯過了什麼?
編輯:如果有幫助,
我工作的一個桌面上的Intel Core 2 Duo處理器(64位CPU),其具有的WinXP。因此,CPU明智地訪問超過4 GB的地址空間應該不成問題。什麼其他所有組件應爲64位的支持啓用,即
一)如何啓用64位編譯器的支持,而編譯(我使用Visual Studio 2005專業版)
灣)操作系統支持對於64位 - 我正在使用Windows XP Professional。
謝謝。
-AD。
請告訴我你寫這樣的挫折感,我從來沒有在不經意間使你的malloc 73GB我的服務器上... – Eric 2009-06-16 12:52:42