Aşağıdaki örneği düşünün:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
İçin oluşturulan montaj kodu vector::empty
(optimizasyon ile clang tarafından):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
Neden yığın alanı ayırıyor? Hiç kullanılmaz. push
Ve pop
ihmal edilebilir. Optimize edilmiş MSVC ve gcc yapıları da bu işlev için yığın alanını kullanır ( godbolt'a bakın ), bu yüzden bir neden olmalı.
@Bob__: Hayır. Neden yapayım?
—
Dr Gut
vector::size()
, satır içi olmadığını simüle etmek için örnekte tanımlanmamıştır.
Peki, bir derleyici bilmediği bir şeyi nasıl optimize edebilir?
—
Bob__
@Bob__: Bence, uygulamasını bilmek
—
Dr Gut
vector::size()
bir yığın çerçeve ayırmak ya da ayırmak için uygun değildir vector::empty()
. İçinde empty()
sadece ne olursa olsun denir.
Şey, bir şey döndüren bir işlev çağırıyorsunuz, bunun için alana ihtiyacınız var (daha iyi bilmiyorsanız).
—
Bob__
this
parametreyi açıkladınız mı?