我遇到了一种情况(在 Win32 上),其中 std::ostringstream 对象继续消耗进程内存,即使它在一系列附加类型操作后表面上被清除。请看一下这个 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 对象的这种泄漏现象,还有哪些其他替代对象可用而不是这个片状对象?
非常感谢!