トップ回答者
Visual Studio 2013の配列要素数に関して

質問
-
Visual Studio 2013(C言語)を利用させていただいております。
物理学のシミュレーションを行うにあたり、非常に大きな要素数を持つ配列を扱いたいと考えております(例:floa型配列要素数10^9個など)。
要素数は使用するマシンのメモリによって限界があると知ったため、従来のPC(メモリ8GBから)128GBメモリをもつ計算用PCへと切り替えようと考えております。この場合、マシンを切り替えれば自動的に使用できる配列要素数は大きくなるのでしょうか?(malloc関数で確保できるサイズは大きくなるのでしょうか?)
または、Visual Studio 2013の設定の方でも何か変更が必要でしょうか?
どうぞよろしくお願い致します。
回答
-
巨大メモリ(2GB 以上のメモリ領域)を使用するには 64ビット OS 上でかつ 64ビット アプリケーション として実行する必要があります。
Visual Studio 2013 で 64ビットアプリケーション を ビルドするには下記のサイトが参考になるのではないかと思います。
https://msdn.microsoft.com/ja-jp/library/9yb4317s(v=vs.120).aspx- 編集済み kenjinoteMVP 2016年10月6日 7:21
- 回答としてマーク 星 睦美 2016年10月28日 2:56
-
floatは4Byteなので4,000,000,000=4GByteとなります。
以下、やや省略して説明します。まずOSですが、例えばWindow7(32bit版)の場合、
システムが認識できる上限が4GByte(Homeエディションは2GByte)なので、
搭載されている物理メモリーがこれを超えても使用することができません。
従って、32bit版のOSは選択すべきではないと思います。
64bit OSを使用することが前提になるでしょう。
(参考)
http://www.atmarkit.co.jp/ait/articles/0903/06/news136.html次にアプリケーションの構成ですが、64bit構成を選択してビルドすべきだと思います。
ただし、巨大配列を一気にメモリーに配置する方法はあまりお勧めできません。
この場合プロセスごとに2TByteの物理メモリが使用でき、8TByteのアドレス空間がサポートされるからです。
(参考)
https://msdn.microsoft.com/ja-jp/library/bb427430(v=vs.85).aspx
この方法では処理途中で結果を確認したり、中断したり、再開したりなどがコードしづらくなります。
一般に、巨大データを処理する場合、データはファイルに置き、
部分をメモリー読み込んで処理する形が一般的で、かつ安全です。
この方法の場合巨大メモリーは必要ありません。
すべての返信
-
巨大メモリ(2GB 以上のメモリ領域)を使用するには 64ビット OS 上でかつ 64ビット アプリケーション として実行する必要があります。
Visual Studio 2013 で 64ビットアプリケーション を ビルドするには下記のサイトが参考になるのではないかと思います。
https://msdn.microsoft.com/ja-jp/library/9yb4317s(v=vs.120).aspx- 編集済み kenjinoteMVP 2016年10月6日 7:21
- 回答としてマーク 星 睦美 2016年10月28日 2:56
-
floatは4Byteなので4,000,000,000=4GByteとなります。
以下、やや省略して説明します。まずOSですが、例えばWindow7(32bit版)の場合、
システムが認識できる上限が4GByte(Homeエディションは2GByte)なので、
搭載されている物理メモリーがこれを超えても使用することができません。
従って、32bit版のOSは選択すべきではないと思います。
64bit OSを使用することが前提になるでしょう。
(参考)
http://www.atmarkit.co.jp/ait/articles/0903/06/news136.html次にアプリケーションの構成ですが、64bit構成を選択してビルドすべきだと思います。
ただし、巨大配列を一気にメモリーに配置する方法はあまりお勧めできません。
この場合プロセスごとに2TByteの物理メモリが使用でき、8TByteのアドレス空間がサポートされるからです。
(参考)
https://msdn.microsoft.com/ja-jp/library/bb427430(v=vs.85).aspx
この方法では処理途中で結果を確認したり、中断したり、再開したりなどがコードしづらくなります。
一般に、巨大データを処理する場合、データはファイルに置き、
部分をメモリー読み込んで処理する形が一般的で、かつ安全です。
この方法の場合巨大メモリーは必要ありません。