Рассмотрим следующий пример:
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
могут быть опущены. Оптимизированные сборки MSV C и g cc также используют пространство стека для этой функции (см. godbolt ), поэтому должна быть причина.