5

其中awk有两个输出函数:printprintf

  • 他们的实现有awk很大不同吗?
  • 关于性能/速度有什么区别(如果可能的话——理论上,不仅仅是time命令行上的“”)?
  • 他们使用相同的系统调用吗?
4

1 回答 1

12
  1. 性能差异可能无法衡量。
  2. print函数在末尾输出一个换行符;printf除非要求,否则不会。
  3. 代码将print参数转换为字符串,然后将它们发送到由 OFS(输出字段分隔符)分隔的输出。
  4. 代码可能需要先将字符串转换为双精度,然后printf再使用双精度格式(%16.8g或其他格式)和类似操作对其进行格式化。
  5. 所使用的系统调用将write(2)用于两者或类似的东西,但将有代码(可能<stdio.h>)在其之上分层。

所有这些加起来就是:

  • 实现方式不同;print比 . 更简单(因此更快)printf
  • 对于大多数目的,差异可能无法测量。
  • print如果它可以满足您的需要,请使用;printf当它做你需要的时候使用。
  • 别担心。

而且使用asprintf后跟print可能会比printf直接使用慢,所以不要。

如有疑问,请测量。

于 2012-09-06T22:55:05.660 回答