C++ 从stringstream中删除(释放)元素

C++ 从stringstream中删除(释放)元素,c++,memory-management,stl,C++,Memory Management,Stl,我正试图处理大量的数据。我有一个std::stringstream,它由一个大约0.5g的大缓冲区初始化,我从中读取: fread(buffer, sizeof(char), fileSize, infile); std::stringstream stream(buffer); free(buffer) 缓冲区非常大 现在,我以以下方式读取这个std::stringstream: while(std::getline(stream, line)) { do something with

我正试图处理大量的数据。我有一个std::stringstream,它由一个大约0.5g的大缓冲区初始化,我从中读取:

fread(buffer, sizeof(char), fileSize, infile);
std::stringstream stream(buffer);
free(buffer)
缓冲区非常大 现在,我以以下方式读取这个std::stringstream:

while(std::getline(stream, line))
{
  do something with that line...
}
因为这个流是由一个大的缓冲区初始化的,我正在使用STL容器来存储这个循环中的行中的数据,所以我的内存不足

当我通过解析循环为稍后使用的其他容器释放内存时,有没有办法从std::stringstream中释放字节?

由于使用存储其数据,缓冲区的内容被复制到存储在流中的字符串中。因此,为了回答您的问题,您可以在创建和初始化字符串流后立即释放缓冲区


<>但是,一个更有趣的问题是,为什么你直接使用C文件处理而不是C++流?为什么要把整个文件读入内存呢?如果文件太大了,为什么不把它分成一行或几行呢?或者为什么不呢?

只是出于兴趣,为什么不使用std::fstream?因为我想将文件导入内存,而不是逐行读取,所以我选择先将其读入缓冲区,然后像字符串流一样访问它听起来有点像过早优化;使用fstream真的太慢了吗?我唯一的其他建议是考虑像MMAP之类的低级内容,或是编写自己的字符串缓冲类,当通过正常的ISReRAM机制读取时,渐进式缓冲区会自行处理。但这似乎是一个很大的努力时,你可以只使用流!我会回答你的提问,但我的问题不是我是否可以释放缓冲区,我知道我可以。。。我的问题是,在我将stringstream读入第1行之后,我是否可以从该stringstream中释放零件。我喜欢C风格的文件处理,因为我现在从C++移到C++,所以它的前一个生命的剩余部分:2.当我尝试逐行读取时,它的工作速度确实非常慢3。yet@DimaShifrin啊,那么不,你不能这么做,因为你没有缓冲区。而且不可能释放部分内存。可能需要获取字符串,并从当前位置生成子字符串,然后再次将其设置到流缓冲区中,但这项工作比实际值要多。我真的建议你看看文件的内存映射,然后你可以像普通指针一样读取文件,不幸的是你不能使用像std::getline这样的优秀流功能,但它可以在其他方面更简单、更高效。文件的内存映射对我很有用!同时也学到了一些新的东西,谢谢!