我试图处理大量数据。我有一个std::stringstream
,它由一个大缓冲区(大约0.5g)初始化,并且我从中读取它:
fread(buffer, sizeof(char), fileSize, infile);
std::stringstream stream(buffer);
free(buffer)
(buffer
非常大)
现在我以下列方式阅读std::stringstream
:
while(std::getline(stream, line))
{
do something with that line...
}
因为这个流是由一个大缓冲区初始化的,我使用STL容器来存储这个循环中line
的数据,我的内存不足。
有没有办法从std::stringstream
释放字节,因为我正在通过解析循环为我以后使用的其他容器释放内存?
答案 0 :(得分:0)
由于std::istringstream
使用std::string
来存储其数据,因此buffer
的内容被复制到存储在流中的字符串。所以要回答你的问题,是的,你可以在创建和初始化字符串流后立即释放缓冲区。
然而,一个更有趣的问题是你为什么直接使用C文件处理而不是C ++流?为什么要将整个文件读入内存,如果它太大了,为什么不把它(如一行或多行)?或者为什么不memory map the file呢?