ある種の2次元配列を使用する必要がある場所に取り組んでいる問題があります。配列は固定幅 (4 列) ですが、その場で余分な行を作成する必要があります。
これを行うために、私はベクトルのベクトルを使用しており、これを含むいくつかのネストされたループを使用しています。
array.push_back(vector<float>(4));
array[n][0] = a;
array[n][1] = b;
array[n][2] = c;
array[n][3] = d;
n++
行とその内容を追加します。問題は、作成しようとしていた要素の数でメモリが不足しているように見えることです。そのため、使用していた要素の数を減らしました。しかし、その後、deque について読み始め、連続している必要がないため、より多くのメモリを使用できるようになると考えました。このループでは、すべての宣言と同様に、「vector」のすべての言及を「deque」に変更しました。しかし、今度は行数を減らしても、再びメモリが不足しているように見えました。
コードが使用しているメモリの量を調べたところ、deque を使用している場合、メモリは 2GB を超えて着実に増加し、使用する行数が少ない場合でもプログラムはすぐに終了します。このループのどこがメモリ不足になるのか正確にはわかりません。
ベクトルを使用すると、ループが終了してもメモリ使用量 (同じ行数の場合) は 1GB 未満です。その後、さらに行が追加される同様のループに進みますが、まだ約 1.4GB にしか達していません。
だから私の質問はです。deque が vector の 2 倍以上のメモリを使用するのは普通のことですか、それとも、宣言/初期化と上記のコードで "vector" という単語を "deque" に置き換えるだけでよいという誤った仮定をしているのですか?
前もって感謝します。
使用しています: MS Visual C++ 2010 (32 ビット) Windows 7 (64 ビット)