如何在不复制数据的情况下逐行处理缓冲区中的数据?

问题描述 投票:0回答:1

我目前正在做这样的事情:

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将传递给其他功能。

c++ string memory buffer move
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.