1

非常に大きな配列を割り当てる必要があります。このタイプのエラーなしで配列を割り当てる方法はありますか? ベクトルを使用せずに8 GBのメモリがあることに注意してください。これはまさにエラーです

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 ビット操作で新しいソリューション プラットフォームを作成することです*/

4

2 に答える 2

3

32 ビット プロセスで 4GB ブロックを割り当てようとしています。それは可能ではありません。アドレス可能なスペースは 2GB から 4GB の間のどこかに制限されていますが、実際には、単一の連続したブロックで使用できるスペースははるかに少なくなります。

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

于 2012-04-29T17:03:08.687 に答える
0

32 ビットのアドレス空間では、おそらく 1GB の連続メモリを使用できません (4GB も確実にありません)。x64 用にコンパイルする必要があります。

于 2012-04-29T17:03:12.123 に答える