Я столкнулся с ситуацией (на Win32), где объект std :: ostringstream продолжает потреблять память процесса, даже если это якобы очищается после серии операций типа append. Пожалуйста, обратите внимание на этот фрагмент C++:C++ STL в VS2008: std :: ostringstream throws std :: bad_alloc после тяжелого присвоения/явного использования
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);
}
}
Во время выполнения внутренней, а() цикл, наблюдение за использованием памяти текущего процесса в диспетчере задач показывает непрерывный восходящий пандус, который в конечном итоге уровень выключения. Однако это выравнивание происходит одновременно с ошибкой std :: bad_alloc. Это предполагает, что память кучи либо исчерпана, либо запрошенный размер блока недоступен в непрерывном пространстве.
Кто-нибудь еще испытал это ядовитое явление с объектами ostringstream и какие другие альтернативные объекты доступны вместо этого сломанного?
Большое спасибо!