[英]GCC printf optimization
我注意到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
,編譯器可能會將其弄亂。 是真的嗎
使用GCC編譯時,某些函數是內置函數。 這意味着它們的實現內置於編譯器中,並且庫版本被忽略。 printf
是這樣的功能之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.