6

new で大きなメモリ ブロックを割り当てる必要があります。

2 部構成のアプリケーションのプロデューサー側のモックを作成しているため、new を使用することに固執しています。実際のプロデューサー コードはこれらの大きなブロックを割り当てており、私のコードはそれらを (処理後に) 削除する責任があります。

アプリケーションがヒープから大量のメモリを割り当てることができるようにする方法はありますか? ヒープをより大きなサイズに設定できますか?

私の場合、288000 バイトの 64 ブロックです。12 個を割り当てる場合もあれば、27 個を割り当てる場合もあります。std::bad_alloc 例外が発生しています。

これは、C++、Linux 上の GCC (32 ビット) です。

4

5 に答える 5

4

プロセスのulimitによって制限されている可能性があります。ulimit -a仮想メモリとデータセグメントのサイズ制限を実行して確認します。それ以外に、実際に何が起こっているのかを確認できるように、割り当てコードを投稿できますか?

于 2009-02-26T12:44:38.203 に答える
1

アップデート:

その後、配列のインデックス作成のバグを修正し、適切に割り当てられるようになりました。

推測する必要がある場合...私は自分のヒープを歩き回っていて、mallocのデータ構造をいじっていました。(??)

于 2009-02-26T20:18:52.527 に答える
0

プログラムを異なる時間に実行すると異なる動作が発生するという事実から、割り当てコードは実際の問題ではないと思います。代わりに、他の誰かがメモリを使用していて、あなたはそれが欠落していることを発見しているカナリアです。

その「他の誰か」がプログラムに含まれている場合は、Valgrindを使用して見つけることができるはずです。

他の誰かが別のプログラムである場合は、別のランレベルに移動することでそれを判断できるはずです(ただし、必ずしも原因を知る必要はありません)。

于 2009-02-26T18:00:54.683 に答える
0

プログラムの起動時にすべてのメモリを割り当て、新しい配置を使用してバッファを配置することをお勧めします。なぜこのアプローチ?まあ、断片化などを手動で追跡できます。プロセスに割り当てることができるメモリの量を決定する移植可能な方法はありません。その情報を取得するLinux固有のシステムコールがあると確信しています(それが何であるかはわかりません)。幸運を。

于 2009-02-26T16:23:50.657 に答える