2
我注意到GCC對優化printf
非常聰明。例如,printf("")
已從完成的代碼中完全刪除。 printf("\n")
被替換爲putchar('\n')
。GCC printf優化
我注意到當我編譯一個很小的模塊,像這樣:
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
,編譯器可能會搞砸了。這是真的嗎?
感謝您的鏈接。不幸的是,它沒有描述可能發生的所有可能的優化。只是列出了功能。 – detunized
一旦一個函數在編譯器中,編譯器就可以自由地提供任何代碼替換,它們表現出相同的行爲。在printf的情況下,它可以檢查格式字符串並相應地生成代碼。庫函數不能做到這一點。 – doron