数値シミュレーションを実行するプログラムを FORTRAN から C++ に翻訳しています。
800MB のサイズの 2 倍の大きな行列を処理する必要があります。これ
double M[100][100][100][100];
スタックがそれほど大きくないため、セグメンテーション エラーが発生します。配列を割り当てたり、割り当てを解除したりするために 4 つの for ループが必要なため、new、delete を使用するのは厄介です。
std::array はスタックにあるので良くありません。std::vector は良い選択なので、
最初の質問 std::vector は、高速シミュレーションまたは
vector<vector<vector<vector<int,100>,100>,100>,100>
無駄で重いデータをたくさん運ぶでしょうか?
2番目の質問 私が使用できる他のデータ構造を知っていますか? たぶんブーストから何かがあるでしょう。
今のところ、私は単にこのソリューションを使用しています:
double * M = new double [100000000];
必要なエントリに手動でアクセスしています。他にパフォーマンスの高いソリューションが見つからない場合は、この最後のメソッドを自動的に管理するクラスを作成します。
3 番目の質問それによってパフォーマンスが大幅に低下すると思いますか?