Chủ đề trên đã khiến tôi phải làm một số thí nghiệm với bool
và int
trong if
điều kiện. Vì vậy, chỉ vì tò mò, tôi đã viết chương trình này:
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
tạo mã asm cho từng chức năng như sau:
mã asm cho
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
mã asm cho
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
Đáng ngạc nhiên, g(bool)
tạo ra nhiều asm
hướng dẫn hơn ! Nó có nghĩa if(bool)
là chậm hơn một chút if(int)
? Tôi đã từng nghĩ rằng bool
nó được thiết kế đặc biệt để được sử dụng trong câu lệnh có điều kiện chẳng hạn như if
, vì vậy tôi đã mong đợi g(bool)
tạo ra các lệnh asm ít hơn, do đó làm cho g(bool)
hiệu quả hơn và nhanh hơn.
BIÊN TẬP:
Tôi hiện không sử dụng bất kỳ cờ tối ưu hóa nào. Nhưng ngay cả khi không có nó, tại sao nó tạo ra nhiều asm hơn g(bool)
là một câu hỏi mà tôi đang tìm kiếm một câu trả lời hợp lý. Tôi cũng nên nói với bạn rằng -O2
cờ tối ưu hóa tạo ra giống hệt như asm. Nhưng đó không phải là câu hỏi. Câu hỏi là những gì tôi đã hỏi.