我注意到GCC在优化printf
方面非常聪明。例如,从结果代码中完全删除printf("")
。printf("\n")
被putchar('\n')
所取代。
当我编译这样一个非常小的模块时,我注意到:
extern "C" int printf(const char *__restrict __format, ...);
void f()
{
printf("\n");
}
对于gcc -O2
,对printf
的调用被putchar('\n')
所取代(甚至不需要包含任何头文件)。
生成的代码:
f():
mov edi, 10
jmp putchar
允许执行这些优化的机制是什么?据我所知,标准C++没有提供任何允许这种优化的特性。
它可以扩展到用户函数,还是在编译器中“硬编码”呢?
这也意味着如果我想用自己的实现重新定义printf
,编译器可能会搞砸它。是真的吗?
发布于 2013-10-21 08:43:54
与GCC一起编译时,某些函数是内置函数.这意味着它们的实现被内置到编译器中,而库版本则被忽略。printf
就是这样的一个函数。
https://stackoverflow.com/questions/19499618
复制相似问题