據我所知,g++
與優化開啓後就會刪除函數調用bar
完全有如下情況:g ++空函數刪除是否遞歸地工作?
int bar() { }
int foo() { bar(); }
然而,考慮以下兩種情況下,被定義爲上述bar
:
情況1:
int foo(int a, int b) {
if (a > b) bar();
}
情況2:
int foo() { bar(); }
int foo2() {foo(); }
在情況1中,if
語句也會被刪除,因爲即使條件爲真,它也會執行死代碼?
在情況2中,將內的foo
的呼叫移除?
看看反彙編。這並不難看出。 –
你知道你可以試試看嗎?例如,使用GCC的-S選項來編譯但不能組裝,那麼你將能夠很容易地讀取它正在做的事情。 –
@JohnZwinck,我會試試。我原本對disas猶豫不決,因爲我不確定要尋找什麼,因爲我猜想編譯器會內聯。 – merlin2011