一个比printf快的函数

时间:2015-01-14 12:26:00

标签: c printf

我是初学c程序员,我读到printf()是非常复杂的功能,非常慢并消耗许多CPU周期。所以我想知道标准纯c库中是否存在任何函数,它是否比printf()更快,何时使用该函数以及何时不使用它。我的目标是编写可以在任何计算机和/或嵌入式系统上运行的高效代码

2 个答案:

答案 0 :(得分:4)

实际上我发现write()printf()的最快替代品 我已经编写了2个小程序,可以将hello world打印出来 第一个

#include <stdio.h>
#include <string.h>
#include <unistd.h> int main() {
char* h = "hello world\n";
for ( int i=0; i < 100000; i++) write(0,h,strlen(h));
}

和第二个

#include <stdio.h> 
int main() {
char* x = "hello world\n";
for (int i =0;i<100000; i++) printf("%s",x); }

并比较了我的电脑上2个程序的运行时间 第一次在2.740s终止 而第二个在3.071s终止

答案 1 :(得分:1)

有理由不鼓励使用printf。

1)printf是一个函数,不太可能是内联函数,因此作为一个函数,它会破坏编译器对它周围代码的优化。如果你有一个循环,它做了很多繁重的工作,并且你希望编译器能够很好地优化它,那么不要在该循环中调用任何非内联函数。

2)stdio路由内容的方式非常依赖于实现,并且可能非常慢。如果您使用开发板来运行代码,那么stdio通常通过JTAG实现。在这种情况下,不仅printf,而且通过stdio的一切都非常慢。如果你使用printf太多,你将很容易达到时间限制。

3)您的目标平台可能无法实施stdio。这对于嵌入式平台来说很常见,因为它们嵌入了其他内容,并且可能没有简单的方法将内容路由到内外。

对你的问题:是和否。

是的:有一些跟踪实用程序设计为轻量级和快速,可以用作printf的更快替代品,例如Texas Instruments的GT_TRACE用于DPS。与printf不同,可以在运行时和编译时轻松关闭跟踪。关闭时,它们只需要很少的时间。

否:跟踪实用程序不是标准C.它们通常是目标平台SDK的一部分

结论:就目前而言,不要过多考虑它。如有必要,在移动到嵌入式平台时将printfs替换为trace。