2012-04-29 140 views
1

我需要分配一個非常大的數組有沒有辦法分配一個數組沒有這種類型的錯誤?請注意,我有8 GB的內存,而不使用矢量 這是完全錯誤在0x771515ee未處理的異常Microsoft C++異常:在內存位置std :: bad_alloc 0x0049f904

Unhandled exception at 0x771515ee in __ Microsoft C++ exception: 
std::bad_alloc at memory location 0x0049f904.. 

,這是我的代碼塊

#include<cstdlib> 
int main() 
{ 
    size_t arraySize =1024*1024*1024; 
    int *a= new int[arraySize]; 
    for (int i = 0; i < arraySize; i++) 
    { 
    a[i] = 3; 
    } 
    return 0; 
} 

/*謝謝你們對我的問題的解決方案是創建一個x64位操作的新解決方案平臺*/

+0

那些看起來像32位指針(即只能容納4G不同地址的那種指針)。 – Mat

+1

你在32位或64位Windows上嗎? – NPE

+0

...你正在編譯64位操作? –

回答

3

您試圖在32位進程中分配4GB的塊。這是不可能的。你被限制在2GB到4GB的可尋址空間之內,但事實上,在一個連續的塊中可用得少得多。

如果你確實需要在一個數組中有這樣一個大塊,那麼你就需要切換到64位進程。重新考慮你的算法可能是最好的解決方案。

+1

他試圖分配1GB,而不是4GB。 – Puppy

+2

@DeadMG'sizeof(int)== 4',在Windows上 –

+0

我正在使用核心I7它是64位 – Yasser

0

32位地址空間可能沒有1GB可用連續內存(絕對不是4GB)。您必須編譯爲x64。

+0

實際上這會嘗試分配4GB,所以沒有多少塊會幫助32位 –

+2

如果可能的話,應儘量避免使用Visual C++標準庫的'deque',因爲它具有糟糕的性能特徵:[它執行的操作大致類似於指向元素](http://stackoverflow.com/a/5607710/151292)。 –