混合cout和printf以获得更快的输出

在执行一些测试后,我注意到它printf比cout。我知道它取决于实现,但是在我的Linux机器上printf要快8倍。所以我的想法是混合两种打印方法:我想cout用于简单的打印,我计划printf用于产生巨大的输出(通常是循环的)。我认为这样做是安全的,只要我不忘记在切换到其他方法之前先冲洗即可:


cout << "Hello" << endl;

cout.flush();


for (int i=0; i<1000000; ++i) {

    printf("World!\n");

}

fflush(stdout);


cout << "last line" << endl;

cout << flush;

这样可以吗


更新:感谢您的宝贵意见。答案摘要:如果要避免棘手的解决方案,只需不使用endl,cout因为它会隐式刷新缓冲区。使用"\n"代替。如果您产生大量输出,可能会很有趣。


白衣非少年
浏览 896回答 3
3回答

至尊宝的传说

另外,请注意,C ++流已同步到C流。因此,它需要付出额外的工作来保持同步。还要注意的另一件事是确保您冲洗流的数量相等。如果您在一个系统上连续冲洗流而不是在另一个系统上冲洗流,则肯定会影响测试速度。在假设一个比另一个更快之前,您应该:从CI / O取消同步C ++ I / O(请参见sync_with_stdio())。确保冲洗量可比。
打开App,查看更多内容
随时随地看视频慕课网APP