Visual Studio C ++ 2010(リリースモードでビルド)で記述されたWindowsベースのソフトウェアで400万個の三角形をレンダリングしたいと思います。390万個の三角形をレンダリングすると、ソフトウェアが消費するRAMメモリの合計は400MBになります。しかし、400万個の三角形(さらに10万個以上)をレンダリングしようとすると、システムでエラーが発生します。
For Example:
Point *P = new (std::nothrow) Point[nb_triangles]; //==> "(std::nothrow)" is for catching the run time memory allocation error. (Point is X, Y, Z floats)
If(P == NULL)
message("System can't allocate this much memory."); // System gives me this error. It means the system can't reserve huge memory for this operation.
頂点、面法線、頂点法線などにメモリを割り当てる必要があります。
実際に私が得ていないのは、8 GBのRAMメモリがあり(ただし、32ビットXPウィンドウでは3.2 GBのメモリ)、ソフトウェアは400 MBだけ予約されており、空きメモリは1 GBを超えていますが、 10万個の三角形をさらにレンダリングすると、エラーが発生します。なぜそれが私にエラーを与えているのですか?それはまだ1GB以上の空きRAMメモリを持っているので?
この問題を修正する方法はありますか?アプリケーションに使用可能なすべてのメモリを割り当てるにはどうすればよいですか?この問題のために、私は390万の三角形をレンダリングするためだけにソフトウェアに制限を設ける必要があり、それは良くありません。
そして、私の心にあるもう1つの質問は、メモリ割り当て用のc ++ "new"演算子でエラーが発生することですが、c"malloc"演算子はどうでしょうか。「malloc」でこの問題を修正できますか?これら2つの間に違いはありますか?
案内してください。ありがとう。
更新#1:
たくさん試したり、コードを変更したり、メモリリークを削除したりしましたが、400万を超えるメモリを割り当てることはできません。コード全体を「ベクター」に変更することはできません。「ベクトル」に変更することはできません。「新しい」で自分のデータ構造に固執する必要があります。以下は、1つのオブジェクトをレンダリングするために割り当てたいポインタです。
P = new points[10000000]; // points is the class with 3 floats X, Y, Z;
N = new Norm[10000000]; // Norm is the class with 3 floats X, Y, Z;
V = new vNorm[10000000]; // vNorm is the class with 3 floats X, Y, Z;
T = new Tri[10000000]; // Tri is the class with 3 integers v1, v2, v3;