从stringstream删除(免费)元素

时间:2014-11-18 12:34:19

标签: c++ memory-management stl

我试图处理大量数据。我有一个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释放字节,因为我正在通过解析循环为我以后使用的其他容器释放内存?

1 个答案:

答案 0 :(得分:0)

由于std::istringstream使用std::string来存储其数据,因此buffer的内容被复制到存储在流中的字符串。所以要回答你的问题,是的,你可以在创建和初始化字符串流后立即释放缓冲区。

然而,一个更有趣的问题是你为什么直接使用C文件处理而不是C ++流?为什么要将整个文件读入内存,如果它太大了,为什么不把它(如一行或多行)?或者为什么不memory map the file呢?