gpt4 book ai didi

c++ - 为什么一次打印一个字符比预先连接它们慢?

转载 作者:行者123 更新时间:2023-11-27 22:40:38 25 4
gpt4 key购买 nike

比方说,将所有小写字符的 std::vector 重复 1000 次并首先逐个字符地打印它们,然后通过连接表明第二种方法至少快两倍:

// Averaged by 1000 measurements
Chars mean: 1.314961314958 ms
Joined mean: 0.430487430487 ms

输出方法本身:

void print_char(const std::vector<char>& chars, std::ostream& os)
{
for (const char x : chars)
os << x;
}

void print_join(const std::vector<char>& chars, std::ostream& os)
{
std::string joined;
joined.reserve(chars.size());
std::copy(chars.begin(), chars.end(), std::back_inserter(joined));
os << joined;
}

为什么会这样?我认为内置 IO 缓冲与累加器字符串 joined

的作用相同

最佳答案

这里你有很多不仅仅是 I/O - 你有 1,000 次调用 osoperator<< .

因此,当您流式传输某些数据时发生的每一件事——例如,检查流的初始状态以满足先决条件,或者在调用期间锁定互斥量以获得线程安全——现在必须发生 1,000 次。

当您只流式传输一个字符串时,这只需要发生一次。当然,流很可能在发送字符串时在其中进行一些状态管理,但是会有各种各样的事情不需要重复。

即使将流操作暂时排除在等式之外,除非您打开了优化并且该调用被内联,否则您不需要 1,000 次函数调用。

关于c++ - 为什么一次打印一个字符比预先连接它们慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264020/

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