Rozważ następujący przykład:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Wygenerowany kod zestawu dla vector::empty(według clang, z optymalizacjami):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Dlaczego przydziela miejsce na stosie? W ogóle nie jest używany. pushI popmoże być pominięty. Zoptymalizowane kompilacje MSVC i gcc również używają przestrzeni stosu dla tej funkcji (patrz na godbolt ), więc musi być jakiś powód.
vector::size()nie jest zdefiniowany w tym przykładzie, aby zasymulować, że nie jest wstawiony.
vector::size()nie ma znaczenia dla przydzielania lub nieprzydzielania ramki stosu vector::empty(). W empty()to właśnie nazywa, cokolwiek to jest.
thisparametr?