最適化
勝手に呼ぶ関数を変えるのは最適化と言えるのだろうか。某Power5の共有メモリマルチプロセッサマシンで、
int main(){ printf("hello,world\n"); }
というソースをコンパイルした結果は
.main: mflr 0 stw 31,-4(1) stw 0,8(1) stwu 1,-64(1) mr 31,1 lwz 3,LC..1(2) bl .printf nop lwz 1,0(1) lwz 0,8(1) mtlr 0 lwz 31,-4(1) blr
だが、-Oでコンパイルすると、
.main: mflr 0 lwz 3,LC..1(2) stw 0,8(1) stwu 1,-56(1) bl .puts nop addi 1,1,56 lwz 0,8(1) mtlr 0 blr
ちなみに、PS3に入れたFedora7のgccではデフォルトでこの最適化がonになるようだった。そのgccのバージョンは知らないが。