首页 文章

GCC printf优化

提问于
浏览
2

我注意到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 ,编译器可能会搞砸它 . 这是真的吗?

1 回答

相关问题