我需要分配一個相當大的內存塊(或多塊) - 幾千兆字節。但是,如果我嘗試分配一個浮動陣列超過5.32元素(〜2 GB),我得到一個運行時錯誤:動態內存分配的限制
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
這是確定的:
float* d = new float[532000000];
但這是壞的(bad_alloc的除外):
float* d = new float[533000000];
然後我試圖分配另一個陣列除了第一個。發現第二個float陣列的最大尺寸爲元件(〜748Mb)。
這是確定的:
float* d = new float[532000000];
float* e = new float[196000000];
這是不好:
float* d = new float[532000000];
float* e = new float[197000000];
我想知道什麼是在應用程序中分配的內存的限制,以及如何避免呢?如何使用虛擬內存?
我的系統 - 32位的Ubuntu 12.10,編譯器 - GCC 4.7,內存 - 8GB(〜6.5 GB可用)
您正在32位或64位平臺上運行嗎? –
看起來像一個地址空間碎片問題。這強烈暗示它是一個32位平臺。 – Mysticial
@OliCharlesworth,32位(添加到主題) – gorill