C语言printf在Windows终端运行极慢的原因及优化方法
Windows下MinGW64编译的printf输出性能为何远低于WSL2?
以下是测试用的简单C程序:
#include <stdio.h> int main(int, char**) { for (int i = 0; i < 500000; i++){ printf("Test %d\n", i); } }
测试结果差异
- WSL2环境下使用GCC编译运行,耗时1.187855秒
- Windows环境下使用MinGW64编译运行,耗时高达84.222000秒
已测试Windows下4款终端/控制台,耗时无显著差异:
- Powershell 5
- Powershell 7
- Terminal
- CMD
另外测试了无输出仅计算的代码,两个环境运行速度一致,确认问题出在printf函数本身。
3-4倍的性能差尚可接受,但近80倍的差距过于离谱,是否有被忽略的关键点?
更新:通过手动设置缓冲区优化性能
根据建议,手动设置stdout缓冲区后性能得到明显提升,修改后的代码如下:
#include <stdio.h> int main(int, char**) { char buf[65536]; setvbuf(stdout, buf, _IOFBF, 65536); for (int i = 0; i < 500000; i++){ printf("Test %d\n", i); } }
优化后程序耗时缩短至5.569000秒,仍比WSL2慢5倍,但已能满足需求。
内容的提问来源于stack exchange,提问作者SimpleJack
相关产品推荐
相关产品推荐

