繁体   English   中英

printf性能:最好使用“%d”或“%c”表示单位数字

[英]printf performance: Better to use “%d” or “%c” for single digit numbers

我正在打印有关结构的信息,该结构仅包含将成为单个数字的信息(小索引和char主要充当bool)。

我希望我的printf调用尽可能高效。 那么使用普通的%i / %d格式说明符会更好'0' ,或者更好的是使用%c并在数字中添加0x30'0' ),因为那时不需要对printf进行任何格式化去做?

编辑/澄清:我已经介绍了一些尝试这两种技术的小程序, %c可以更快。 如果这是生产代码,我会坚持%d ,但这是专门针对基于速度的比赛。 (对不起,因为之前不清楚)。

确切知道的唯一方法是对两个版本进行编码并对其进行分析(或比较生成的机器代码)。 话虽如此,我怀疑你会发现运行时性能有很大差异。 现代编译器是智能的,标准库实现被调整为尽可能高效。 很可能你的printf实现已经对单位数整数进行了特殊的案例处理,这与你提出的类似。 与首先调用 printf的开销相比,所有这些都在噪声中。

代码应按重要性顺序排列:

  1. 正确 - 它完成它应该做的一切, 而不应该做任何事情;
  2. 坚固 - 如果有人看起来很有趣,它不应该摔倒并死亡;
  3. 安全 - 它不是恶意软件向量,它不会暴露任何不应该的数据;
  4. 可维护 - 一些可怜的schmuck最终将不得不更改此代码以添加功能(或修复缺陷);
  5. 高效 - 它不应占用完成给定任务所需的任何空间或时间,这通常是通过选择算法和数据结构而不是任何特定的微优化来驱动的。

我认为你的方法使你的代码不易维护,因为这是实现给定结果的一种非显而易见的方法。

由于您要打印整数,请使用%d ,这样可以提高可读性。

使用其中一个不会以任何显着的方式影响性能。

如果您的应用程序的瓶颈确实是打印阶段,那么考虑使用另一种方法而不是printf() 一些想法: 使用fwrite()优化stdout或POSIX write() ,如@YoYoYonnY建议的那样。

通常,与计算相比,stdout中的打印相对较慢,例如......

HyperTip:过早优化是邪恶的根源 - D. Knuth。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM