- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:x64環境で連続4GB以上のメモリを確保する事は可能でしょうか。
)
x64環境で4GB以上のメモリを確保する方法
このQ&Aのポイント
- x64環境で連続4GB以上のメモリを確保することは可能でしょうか。
- OSはVISTA64bit対応で,メインメモリ8GB搭載しており,OSも8 GBを認識しています。
- メモリ確保の手法は以下の通りです。(VC++2005) img=new unsigned char[4294967295*sizeof(unsigned char)] 上記のように,連続して確保しようとすると,2^32-1=4294967295(約4G弱)Bしかできません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
可能かという質問に関しては、可能という答えで間違いないと思います。 http://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx 上記の上の方の表の様に 8TB まで取得できるはずで「2GBを超える」はクリアされているべきです。 設定を見直されるべきではないでしょうか。MSDN でお調べ下さい。 http://msdn.microsoft.com/ja-jp/library/h2k70f3s.aspx
その他の回答 (1)
- rinkun
- ベストアンサー率44% (706/1571)
回答No.2
> img=new unsigned char[4294967295*sizeof(unsigned char)] この記述の問題ではないでしょうか。 C/C++で単純に数値リテラルを書くとunsigned int型になるので32bit上限でしょう。 VC++64bitでのunsigned longが何bitか知りませんが、64bitあるならL付きリテラルで書いたらどうでしょうか。 何にせよ64bitリテラルを記述する方法はあるでしょうからマニュアル等で調べて試してみて下さい。
質問者
お礼
ご回答ありがとうございます! 数値リテラルについて調査致しました! img=new unsigned char[4294967296ul*sizeof(unsigned char)] 上記の様にul(=unsigned long)と記述しても 4GBメモリ確保には至りませんでした。 rinkun殿,お休みの中にも関わらず難解な問題に ご対応頂いて本当にありがとうございます。 また是非rinkun殿のお力を賜りたいと思いますので, 今後ともよろしくお願いします。
お礼
ご回答ありがとうございます! 回答通り,設定の変更等を調査したのですが, 結局4GB以上メモリ確保は不可能である事が判明しました。 ご紹介頂いたHP <http://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx> の下の方に以下の記述がありました。 「64 bit editions of Windows can only attribute a total of 4 GiB of RAM to any single 32 bit virtual memory instance (or application), regardless of your total RAM.」 現在の開発環境がVS2005(32bitアプリケーション)であるため, サブシステムとしてWOW64を駆使して64bit開発環境でクロスコンパイルを 行い,メモリのヒープ領域をint32(つまり4GB)まで取得するようです。 ●原因は32bitアプリケーションにあるようです。 お休みの中,難解な質問にお答え頂き誠に感謝しております。 今後の方針が決まりましたので,問題は解決したと考えております。 YoxoY殿,また是非とも,今回の様に有効なご回答をして頂ける事を, 皆様の問題解決にご活躍頂ける事を切に期待しております。 また,よろしくお願い致します。