背景:我正在寫一個C++程序,處理大量的地理數據,並希望加載大塊進行一次處理。我受限於使用爲32位機器編譯的應用程序。我正在測試的機器運行的是64位操作系統(Windows 7),並具有6個RAM。使用MS VS 2008你應該能夠分配多少內存?
我有以下代碼:
byte* pTempBuffer2[3];
try
{
//size_t nBufSize = nBandBytes*m_nBandCount;
pTempBuffer2[0] = new byte[nBandBytes];
pTempBuffer2[1] = new byte[nBandBytes];
pTempBuffer2[2] = new byte[nBandBytes];
}
catch (std::bad_alloc)
{
// If we didn't get the memory just don't buffer and we will get data one
// piece at a time.
return;
}
我希望我能夠分配內存,直到應用達到32位尋址的4 GB的限制。但是,當nBandBytes爲466,560,000時,新的第二次嘗試會拋出std :: bad_alloc。在這個階段,進程的工作集(內存)值是665,232 K因此,我似乎無法獲得分配的內存。
已經有一個2演出限制在32位Windows應用程序,其可以擴展到3演出和/ 3GB開關爲Win32一些提。這是在這種環境下的好建議,但與這種情況無關。
多少內存你應該能夠在64位操作系統下的分配與32位應用程序?
我在網上發現了這個參考資料:「如果你在64位操作系統上作爲32位應用運行,那麼你可以獲得所有的4G地址空間,所有這些都可以由物理內存支持(如果你有RAM),即使沒有你自己使用64位指針。「從博客:http://blogs.msdn.com/ricom/archive/2009/06/10/visual-studio-why-is-there-no-64-bit-version。aspx – Bill 2009-06-23 18:10:11
在我的32位機器上,我可以在簡單測試中分配466,560,000×3個字節。似乎是在你的情況下分配點處已經分散的進程內存。 – 2009-06-23 18:19:21
我很難選擇一個答案來標記正確的這個問題。我相信答案很複雜,取決於很多因素。內存映射文件是一個很好的答案,但這個問題的根本原因似乎是內存碎片。 bke1指出了用於查看內存的好工具,許多人談論內存碎片,但我選擇了第一個明確指出問題並給出了嚴格限制的答案(64位下的4 GB和右側標記)。 – Bill 2009-06-23 19:16:50