0

図全体を格納するために動的に割り当てられたブースト multi_array を使用して、3D 点群から作成された 3D ボロノイ図を作成するアプリケーションを開発しています。

私が使用しているテスト ケースの 1 つは大量のメモリ (約 [600][600][600]) を必要とし、これは許容される制限を超えており、bad_alloc になります。

すでにダイアグラムを細かく分割しようとしましたが、合計メモリがすでに制限を超えているように見えるため、機能しません。

私の質問は、PC の制約の下でこのような大きな 3D ボリュームを操作するにはどうすればよいですか?

*編集

Element 型は次のような構造体です。

struct Elem{
  int R[3];
  int d; 
  int label;
}

要素は、3D 空間での位置に基づいて multiarray でインデックス付けされます。

複数配列は、ファイルからスペース上の特定のポイントを設定し、スペース全体に前方および後方マスクを渡すことによって中間スペースを埋めることによって構築されます。

前もって感謝します

4

2 に答える 2

0

要素タイプについては言及していません。要素が 4 バイトfloatの場合、600*600*600 マトリックスは約 820M バイトしか必要とせず、実際にはそれほど大きくありません。プロセスごとのメモリ使用量に対するオペレーティング システムの制限を確認することをお勧めします。Linux の場合は、で確認してくださいulimit -a

マトリックスをメモリに割り当てることが本当にできない場合は、必要なサイズのファイルをディスク上に作成し、 を使用してメモリにマップしますmmapmmap次に、から返されたメモリ アドレスを に渡しますboost::multi_array_ref

于 2014-03-04T04:12:40.793 に答える