※ ChatGPTを利用し、要約された質問です(原文:gcnew arrayによるメモリ確保について)
gcnew arrayによるメモリ確保について
このQ&Aのポイント
C++/CLIにおいて、int SIZE = 1438*1438*998; array<short>^ a = gcnew array<short>( SIZE ); がOutOfMemoryで終了してしまいます。
short* a = new short[ SIZE ]; としてみると正常に動作するようです。
原因がわからずに困っています。何が原因なのかを教えていただきたいです。また、現在のコードを変更せずに(gcnew arrayのまま)解決する方法も知りたいです。
環境
Windows 7 (64 bit) RAM 16.0GB
Visual Studio 2008
※プロジェクトの設定は64bit
C++/CLIにおいて、
int SIZE = 1438*1438*998;
array<short>^ a = gcnew array<short>( SIZE );
がOutOfMemoryで終了してしまいます。
同様のことを、同じプロジェクトでテストコードとして
short* a = new short[ SIZE ];
としてみると正常に動作するようです。
なお、実際のプロジェクトではSIZEはファイルから読み込みます。
開発されてから今まで(数年)、SIZEの値がこれほど大きくなることはありませんでした。
・型指定をshortからcharにすればOutOfMemoryにならない
・しかしnewでの配列確保では正常に動作しているためメモリ不足とは考えにくい
・new演算子のサイズ指定はsize_t(=unsigned 64bit)だがarrayはint(signed 32bit)しか見当たらないのも気になるが、いずれにせよオーバーフローには一億近く足りない
という具合で原因がわからずに困っています。
・そもそも何が原因なのか
・可能な限り現在のコードを変更せずに(gcnew arrayのまま)解決するならどうするのがよいか
を教えていただけないでしょうか。
また、原因に関しては信頼できる情報源を提示いただけると助かります。(英語可)。
お礼
おかげさまで、アプリケーション構成ファイルをいじる必要があることまでたどり着けました。 試してみます。ありがとうございました。