我目前正在做这样的事情:
void my_func(std::iostream &a_large_buffer) {
std::vector<std::string> my_lines;
for (std::string line; std::getline(a_large_buffer, line); )
{
// do stuff with line
my_lines.emplace_back(line);
}
// ...
}
my_func
正在处理网络请求的输出,结果为a_large_buffer
。我检索到的数据可能很大(多个GB)。
当前,代码通过将缓冲区中的数据复制到将存储在向量中的字符串来处理缓冲区中的数据。复制过程将增加内存使用量。
如何避免此不必要的副本?
我想在将缓冲区中的数据复制到line
之后“释放”该数据。或直接将其从a_large_buffer
移到line
。
我找不到std::moveline
。有这样的事情吗?
如评论中所指出,一种简单的解决方案是立即处理line
,而不是保留它。请注意,这里不是一个选择。我必须将line
复制(或移动)到my_lines
,因为my_lines
将传递给其他功能。