上記のトピックにより、私はいくつかの実験をbool
行いint
ましたif
。好奇心からこのプログラムを書きました。
int f(int i)
{
if ( i ) return 99; //if(int)
else return -99;
}
int g(bool b)
{
if ( b ) return 99; //if(bool)
else return -99;
}
int main(){}
g++ intbool.cpp -S
次のように、各関数のasmコードを生成します。
asmコード
f(int)
__Z1fi: LFB0: pushl %ebp LCFI0: movl %esp, %ebp LCFI1: cmpl $0, 8(%ebp) je L2 movl $99, %eax jmp L3 L2: movl $-99, %eax L3: leave LCFI2: ret
asmコード
g(bool)
__Z1gb: LFB1: pushl %ebp LCFI3: movl %esp, %ebp LCFI4: subl $4, %esp LCFI5: movl 8(%ebp), %eax movb %al, -4(%ebp) cmpb $0, -4(%ebp) je L5 movl $99, %eax jmp L6 L5: movl $-99, %eax L6: leave LCFI6: ret
驚いたことに、g(bool)
より多くのasm
指示を生成します!それif(bool)
は少し遅いということif(int)
ですか?以前bool
はのような条件付きステートメントで使用するように特別に設計されていたと思っif
ていg(bool)
たので、asm命令の生成を減らして、g(bool)
より効率的で高速にすることを期待していました。
編集:
現在、最適化フラグは使用していません。しかし、それがなくても、なぜそれがより多くg(bool)
の意見を生み出すのかは、私が合理的な答えを探している質問です。また、-O2
最適化フラグがまったく同じasmを生成することもお伝えしておきます。しかし、それは問題ではありません。問題は私が尋ねたことです。
g(bool)
は、私が合理的な答えを探している質問です。