printf性能:最好对单个数字使用“%d”或“%c”

时间:2019-02-28 19:51:33

标签: c performance printf

我正在打印有关一个结构的信息,该结构仅包含将全部为一位数字的信息(小索引和char主要充当布尔值)。

我希望我的printf通话尽可能高效。因此,使用常规的%i / %d格式说明符会更好,还是使用%c并向其中添加0x30'0')更好呢?数字,从那以后printf就不需要格式化吗?

编辑/说明::我已经介绍了一些尝试两种方法的小型程序,而%c可以更快。如果这是用于生产代码,那么我只会坚持使用%d,但这专门用于基于速度的比赛。 (对不起,因为之前还不清楚)。

2 个答案:

答案 0 :(得分:3)

唯一可以确定的方法是对两个版本进行编码并对其进行概要分析(或比较生成的机器代码)。话虽如此,我怀疑您会发现运行时性能有很大差异。现代编译器很聪明,并且标准库的实现已调整为尽可能高效。您的printf实现很可能已经对一位整数进行了特殊情况处理,该处理与您提出的内容类似。与最初仅调用 printf的开销相比,所有这些都降低了噪音。

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

  1. 正确-它会执行应做的所有事情,而不应该应做的任何事情;
  2. 健壮-如果有人觉得有趣,它不应该倒下而死;
  3. 安全-它不是恶意软件载体,不会暴露任何不该暴露的数据;
  4. 可维护-某些糟糕的东西最终将不得不更改此代码以添加功能(或修复缺陷);
  5. 高效-完成给定任务所需的时间或空间不应超过所需的空间或时间,这通常是由算法和数据结构的选择而不是任何特定的微优化所驱动的。

我认为您的方法会使代码的可维护性降低,因为这不是获得给定结果的明显方法。

答案 1 :(得分:1)

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

一个使用另一个不会对性能产生任何重大影响。

如果应用程序的瓶颈确实在打印阶段,请考虑使用printf()以外的其他方法。一些想法:use fwrite()optimize stdout或POSIX write(),如@YoYoYonnY所建议。

通常,与例如进行计算相比,在stdout中打印相对较慢。

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