出于某种原因,我无法使用行
让我的输出流更快地运行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";
}
每个程序的运行时间如下
first_test(同步)
real 0m1.095s
user 0m0.472s
sys 0m0.299s
second_test(同步关闭)
real 0m1.091s
user 0m0.471s
sys 0m0.299s
我正在使用g ++ -O3 main.cpp进行编译。我在Mac上运行10.11.1。
有什么方法可以通过关闭sync_with_stdio来让输出流更快地执行?
答案 0 :(得分:3)
有没有办法通过关闭sync_with_stdio来让输出流执行得更快?
不,代码运行速度不是强制性的。该选项允许您将I / O与std::cout
/ std::cin
(和朋友)的I / O与I / O混合,从stdout
/ {{1 (和朋友):
stdin
实现定义了I / O是否被缓冲(以及如何),并且实现定义了如何实现此结果。这样做的后果是,实现定义了这种机制是否会降低你的代码速度(然后如果你有任何好处将其关闭)。
您尝试过,在您的情况下,您的编译器具有良好的标准库实现,没有任何可见的价格来保持此同步。
那也说明这种类型的测量很难正确实施。你是如何得到这些价值的?此外,应重复相同的测试多次以计算平均值。另请注意,缓冲本身可能会对此结果产生偏差。请注意,输出到控制台也会平面您的结果。最后注意事项:我也尝试使用高于500000的值,1 ms左右的时间可能不如您所希望的那样准确。