• ベストアンサー
※ 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のまま)解決する方法も知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

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になりますね。

BackendTracer
質問者

お礼

おかげさまで、アプリケーション構成ファイルをいじる必要があることまでたどり着けました。 試してみます。ありがとうございました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

既に回答がついていますが >・しかしnewでの配列確保では正常に動作しているためメモリ不足とは考えにくい newとgcnewはヒープが異なりますから(newはネイティブヒープ, gcnewはマネージヒープ)、newで確保できたのだからgcnewでも確保できるはずというのは成り立ちません。

BackendTracer
質問者

お礼

>newとgcnewはヒープが異なりますから 想像もしていませんでした。貴重なご指摘をありがとうございました。

関連するQ&A