私が取り組んでいる大規模なプロジェクトでメモリ リークに問題がありましたが、VS2010 メモリ チェッカーによると、プロジェクトにはリークはありません (そして、すべてを徹底的にチェックしました)。
リークが小規模で発生するかどうかを確認するために、簡単なテスト プログラムを作成することにしました。
struct TestStruct
{
std::string x[100];
};
class TestClass
{
public:
std::vector<TestStruct*> testA;
//TestStruct** testA;
TestStruct xxx[100];
TestClass()
{
testA.resize(100, NULL);
//testA = new TestStruct*[100];
for(unsigned int a = 0; a < 100; ++a)
{
testA[a] = new TestStruct;
}
}
~TestClass()
{
for(unsigned int a = 0; a < 100; ++a)
{
delete testA[a];
}
//delete [] testA;
testA.clear();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
char inp;
std::cin >> inp;
{
TestClass ttt[2];
TestClass* bbbb = new TestClass[2];
std::cin >> inp;
delete [] bbbb;
}
std::cin >> inp;
std::cin >> inp;
return 0;
}
このコードを使用すると、プログラムは約 1 メガバイトのメモリから開始し、8 メガバイト以上まで増加し、最後に 1.5 メガバイトまで減少します。追加の 0.5 メガはどこに行くのですか? 私は粒子システムで同様の問題を抱えていますが、数百メガバイトの規模です。
私は一生、何が悪いのか理解できません。
余談ですが、(コメントアウトした) 配列を使用すると、無駄なメモリが大幅に削減されますが、完全に削減されるわけではありません。メモリ使用量は、最後の cin と最初の cin で同じになると予想されます。
タスクマネージャーを使用してメモリ使用量を監視しています。
ありがとう。