考虑以下示例:
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),因此必须有一个原因。
                  @Bob__:不,我为什么要?
                
                  
                    —
                    Gut博士
                    
                  
                
              vector::size()在示例中未定义来模拟未内联。
                
                  那么,编译器如何优化它不知道的东西?
                
                
                  
                    —
                    Bob__ 
                    
                  
                
              
                  @Bob__:我认为,了解的实现
                
                  
                    —
                    Gut博士
                    
                  
                
              vector::size()与为分配或不分配堆栈框架无关vector::empty()。empty()无论它是什么,在其中都被称为。
                
                  好吧,您正在调用一个返回某些内容的函数,因此您需要空间(如果您不知道更好的话)。
                
                
                  
                    —
                    Bob__ 
                    
                  
                
              
this参数?