2012-04-29 7 views
1

非常に大きな配列を割り当てる必要があります。このタイプのエラーが発生しても配列を割り当てる方法はありますか?これは正確にエラー未処理の例外0x771515ee Microsoft C++の例外:メモリ位置0x0049f904のstd :: bad_alloc

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

であり、これは私のコードの塊である私は、ベクトル を使用せずにメモリの8ギガバイトを持っていることに注意してください私の問題の解決策がにある

#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のアドレス可能なスペースの間に制限されていますが、実際には1つの連続したブロックで使用できるスペースがずっと少なくなります。

本当にこのような大きなブロックが単一の配列に必要な場合は、64ビットプロセスに切り替える必要があります。アルゴリズムを再考することが最良の解決策になる可能性があります。

+1

を読んでください。彼は4GBではなく1GBを割り当てようとしています。 – 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)。 –