Considere o seguinte exemplo:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
O código de montagem gerado para vector::empty
(por clang, com otimizações):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Por que alocar espaço na pilha? Não é usado de todo. O push
e pop
pode ser omitido. Compilações otimizadas de MSVC e gcc também usam espaço de pilha para esta função (veja no godbolt ), portanto, deve haver uma razão.
@ Bob__: Não. Por que devo?
—
Dr. Gut
vector::size()
não está definido no exemplo para simular que não está embutido.
Então, como um compilador pode otimizar algo que não sabe?
—
Bob__
@ Bob__: Eu acho que conhecer a implementação de
—
Dr. Gut
vector::size()
não é relevante para alocar ou não alocar um quadro de pilha vector::empty()
. Em empty()
que é simplesmente chamado, seja ele qual for.
Bem, você está chamando uma função que retorna algo, precisa de espaço para isso (se não souber de nada).
—
Bob__
this
parâmetro implícito ?