為什么優(yōu)化會(huì)破壞此功能?我們最近在大學(xué)里開了一個(gè)關(guān)于多種語(yǔ)言編程特色的講座。講師寫下了以下功能:inline u64 Swap_64(u64 x){
u64 tmp;
(*(u32*)&tmp) = Swap_32(*(((u32*)&x)+1));
(*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);
return tmp;}雖然我完全理解這在可讀性方面也是非常差的風(fēng)格,但他的主要觀點(diǎn)是這部分代碼在生產(chǎn)代碼中運(yùn)行良好,直到它們實(shí)現(xiàn)了高優(yōu)化級(jí)別。然后,代碼將什么都不做。他說,變量的所有賦值tmp都將由編譯器優(yōu)化。但為什么會(huì)這樣呢?我知道有些情況下變量需要聲明為volatile,這樣編譯器就不會(huì)觸及它們,即使他認(rèn)為它們永遠(yuǎn)不會(huì)被讀或?qū)懀也恢罏槭裁磿?huì)發(fā)生這種情況。
為什么優(yōu)化會(huì)破壞此功能?
料青山看我應(yīng)如是
2019-08-27 16:25:50