gpt4 book ai didi

c++ io streams sync_with_stdio 没有区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:04 27 4
gpt4 key购买 nike

出于某种原因,我无法使我的输出流使用该行运行得更快

std::ios_base::sync_with_stdio(false);

包含在我程序的开头。我正在用这两个程序对此进行测试:

#include <iostream>

int main() {
for (int i = 0; i < 500000; i++)
std::cout << "Hello World\n";
}

#include <iostream>

int main() {
std::ios_base::sync_with_stdio(false);
for (int i = 0; i < 500000; i++)
std::cout << "Hello World\n";
}

每个程序的运行时间如下

第一次测试(同步)

real    0m1.095s
user 0m0.472s
sys 0m0.299s

second_test(关闭同步)

real    0m1.091s
user 0m0.471s
sys 0m0.299s

我正在使用 g++ -O3 main.cpp 进行编译。我在运行 10.11.1 的 Mac 上。

是否有任何方法可以通过关闭 sync_with_stdio 来使输出流执行得更快?

最佳答案

Is there any way to get the output stream to perform faster by turning sync_with_stdio off?

不,代码运行得更快并不是强制性的。该选项允许您将 I/O 与 std::cout/std::cin(和 friends)与 I/O 混合到/从stdout/stdin(和 friend ):

std::cout << "test";
printf("another test";

I/O 是否缓冲(以及如何缓冲)由实现定义,实现定义如何实现此结果。这样做的结果是,它是由实现定义的,该机制是否会减慢您的代码速度(然后关闭它是否对您有任何好处)。

您尝试过,在您的情况下,您的编译器有一个良好标准库实现,没有任何可见的代价来保持这种同步。


也就是说,还要注意这种类型的测量很难正确实现。你是如何获得这些值(value)的?此外,应多次重复相同的测试以计算平均值。另请注意,缓冲本身可能会使此结果产生偏差。请注意,输出到控制台也会平坦您的结果。最后说明:我也会尝试使用高于 500000 的值,大约 1 毫秒的计时可能不如您希望的那么准确。

关于c++ io streams sync_with_stdio 没有区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023764/

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