std::ostringstream オブジェクトがプロセス メモリを消費し続ける状況 (Win32 上) に遭遇しました。この C++ フラグメントを見てください。
int main(void)
{
std::ostringstream cOutputLogStream;
// Random long string
std::string sTest = "jkspoiauyeraspfoiusdfsdfekgpweojkgpwoekpokgkpgeopoegwj";
std::string sEmpty = "";
int n = 0;
int looper = 0;
while (n++ < 100000)
{
while (looper++ < 45)
{
cOutputLogStream << s;
}
cOutputLogStream.str(sEmpty);
cOutputLogStream.clear();
// This should give the heap manager a chance to consolidate
// fragmented memory blocks
Sleep(1);
}
}
内側の while() ループの実行中に、タスク マネージャーでプロセスのメモリ使用量を観察すると、継続的な上昇傾向が見られますが、最終的には横ばいになります。ただし、この平準化は、エラー std::bad_alloc が繰り返しスローされると同時に発生します。これは、ヒープ メモリが使い果たされたか、要求されたサイズのブロックが連続した領域で使用できないことを示しています。
他の誰かが ostringstream オブジェクトでこのリーク現象を経験したことがありますか? また、この不安定なものの代わりに他の代替オブジェクトを利用できますか?
どうもありがとう!