前置インクリメントと後置インクリメントの最適化の違いを調べようとした
前置インクリメント演算子の方が効率がいい、とかいうのを見たのでC言語で試してみたんだけど、そもそもその記事にはJavaScriptで書いてあったのでC言語で試すのは間違いだったかも。あとC言語力もアセンブリ力もそんなにあるわけじゃないから全然わからない……
環境:MacOS 10.7.1 / gcc 4.2.1
ソースコード
/* aaa.c */ int main(void) { int i = 0; return i++; }
/* bbb.c */ int main(void) { int i = 0; return ++i; }
最適化なし (gcc -S -O0)
--- aaa.s 2011-09-20 22:15:49.000000000 +0900 +++ bbb.s 2011-09-20 22:15:54.000000000 +0900 @@ -9,10 +9,10 @@ Ltmp1: movl $0, -12(%rbp) movl -12(%rbp), %eax - movl %eax, -8(%rbp) - movl -12(%rbp), %eax addl $1, %eax movl %eax, -12(%rbp) + movl -12(%rbp), %eax + movl %eax, -8(%rbp) movl -8(%rbp), %eax movl %eax, -4(%rbp) movl -4(%rbp), %eax
最適化レベル1 (gcc -S -O1)
--- aaa2.s 2011-09-20 22:18:55.000000000 +0900 +++ bbb2.s 2011-09-20 22:18:43.000000000 +0900 @@ -7,7 +7,7 @@ Ltmp0: movq %rsp, %rbp Ltmp1: - xorl %eax, %eax + movl $1, %eax popq %rbp ret Leh_func_end1:
結論:全然わからない