【发布时间】:2014-11-18 12:34:18
【问题描述】:
我正在尝试处理大量数据。我有一个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 中释放字节,因为我正在通过解析循环为稍后使用的其他容器释放内存?
【问题讨论】:
-
只是出于兴趣,你为什么不直接使用
std::fstream? -
因为我想将文件导入内存而不是逐行读取,所以我选择先将其读入缓冲区,然后像字符串流一样访问它
-
对我来说听起来有点像过早优化;) 使用
fstream真的太慢了吗?我唯一的其他建议是考虑像mmap这样的低级东西,或者看看编写你自己的字符串缓冲区类,当通过正常的istream机制读取时,它会自行处理......但这似乎很多当你可以使用fstream时努力!
标签: c++ memory-management stl