2017-04-30 14 views
1

マシンの空き容量は2 GB以上です。 アレイの最大要素数は、OS /コンピュータの機能によってのみ制限されます。 つまり、最小2 GBの配列を持つことは、2^32 -1の要素を持つことができます。 しかし、コンパイラは見逃しません。 2^32要素の配列が本当に必要な場合はどうなりますか? :) ...私は2^31-1を試してみましたが、それは動作しません OS 64ビット、6ギガバイトのメモリ、Win32コンソールアプリケーションアレイに大量のメモリを割り当てる方法は?

char * buffer = new char[2147483647]; //Microsoft C++ exception: std::bad_alloc at memory location 0x004FF998. 
+2

WIN32ではなくx64実行可能ファイルにする必要があります。 –

+0

@PaulRまあ、なぜですか? Win32にはメモリ割り当ての制限がありますか? – Evgen8

+0

WIN32 = 32ビットのアドレス空間で、大量の連続した割り当てに使用できるわけではありません。下記の答えを参照してください。 –

答えて

6

あなたは、Windowsで2ギガバイトの単一の割り当てを取得することはできません32ビットアプリケーション。あなたは/ LARGEADDRESSAWAREで3または4 GBを得ることができるので、あなたができると思います。しかし、あなたはできません。

Windows OS maps some trap pages right around the 2GB markは、いくつかの種類のプログラミングエラーを捕まえるためのものです(私は間違っていましたが、実際にはリンクを読み、Alpha AXPポートを簡単にしました)。つまり、2 GBのアレイはどこにも収まらないということです。

だから、アプリを64ビットアプリケーションとして構築してください。

関連する問題