考虑以下示例:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
生成的汇编代码vector::empty
(通过 clang,经过优化):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
为什么要分配堆栈空间?它根本不使用。和可以省略push
。pop
MSVC 和 gcc 的优化构建也为此函数使用堆栈空间(参见Godbolt),所以一定有原因。