gpt4 book ai didi

c++ - 在通过插入运算符 '<<' 执行写入时使用 std::stringbuf 进行缓冲的效果

转载 作者:行者123 更新时间:2023-11-28 01:46:25 30 4
gpt4 key购买 nike

我正在尝试对手动缓冲(通过 std::stringbuf )对运行时间的影响进行基准测试,同时执行对文件的写入,而不是插入运算符 << 完成的缓冲。 .

版本 1(无手动缓冲)

此版本涉及在每次迭代时执行写入。

std::ofstream ofs;
ofs.open("output_file", std::ios::out);

for (int i = 0; i < 100000000; i++)
ofs << "Hello world!\n";

时间: 2.83s 用户 1.14s 系统 28% cpu 13.918 总计

版本 2(手动缓冲)

此版本缓冲了 std::string 中的全部数据在最终写入之前对象。

std::string buffer;
std::ofstream ofs;
ofs.open("output_file", std::ios::out);

for (int i = 0; i < 100000000; i++)
buffer.append("Hello world!\n");

ofs << buffer;

时间: 1.87s 用户 2.27s 系统 24% cpu 16.654 总计

版本 1 和版本 2 的运行时间存在明显差异,并且在不同的运行中观察到类似的行为。当第二个版本仅执行单个写入操作而不是第一个版本中的多个写入操作时,为什么第二个版本最终会变慢?
此结果也与 previous question 中发布的结果形成对比,但是当前的情况略有不同。

最佳答案

它不会“只执行一次写操作”;您没有考虑构建该字符串的成本,该字符串不为零。

您可能会发现 buffer.reserve(100000000 * strlen("Hello world!\n")) 有点帮助。

关于c++ - 在通过插入运算符 '<<' 执行写入时使用 std::stringbuf 进行缓冲的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44870448/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com