- ベストアンサー
※ 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のまま)解決する方法も知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://msdn.microsoft.com/ja-jp/library/system.array%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1 > 既定では、Array の最大サイズは 2 GB の (GB) です。 > 64 ビット環境では、ランタイム環境の true へ gcAllowVeryLargeObjects の構成要素の enabled の属性を設定すると、サイズの制限を回避できます。 ……だそうです。 short型(2バイト)で要素数1438*1438*998だと、約3.8GBになりますね。
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.2
既に回答がついていますが >・しかしnewでの配列確保では正常に動作しているためメモリ不足とは考えにくい newとgcnewはヒープが異なりますから(newはネイティブヒープ, gcnewはマネージヒープ)、newで確保できたのだからgcnewでも確保できるはずというのは成り立ちません。
質問者
お礼
>newとgcnewはヒープが異なりますから 想像もしていませんでした。貴重なご指摘をありがとうございました。
お礼
おかげさまで、アプリケーション構成ファイルをいじる必要があることまでたどり着けました。 試してみます。ありがとうございました。