Prenons l'exemple suivant:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
Le code d'assembly généré pour vector::empty
(par clang, avec optimisations):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Pourquoi alloue-t-il de l'espace de pile? Il n'est pas utilisé du tout. Le push
et pop
pourrait être omis. Les versions optimisées de MSVC et gcc utilisent également l'espace de pile pour cette fonction (voir sur godbolt ), donc il doit y avoir une raison.
vector::size()
n'est pas défini dans l'exemple pour simuler qu'il n'est pas en ligne.
vector::size()
n'est pas pertinent pour allouer ou ne pas allouer un cadre de pile pour vector::empty()
. En empty()
elle est simplement appelée, quelle qu'elle soit.
this
paramètre implicite ?