Neden boyutu == üye ekliyorum rağmen(DerivedClass) boyutu.
sizeof(Base) == 24
sizeof(Derived) == 24
aşağıda kodu.
Neden onların boyutları eşittir?
Base
Sınıf 3 üye var ve Derived
sınıfta başka bir üye var.
class Base
{
private:
double d;
protected:
long l;
public:
int i;
};
class Derived : public Base
{
private:
float f;
};
CEVAP
Bu sınıf Base
8 bayt hizalama gereksinimi olan çok oldu, ama son üyesi 4 boyutu vardır. Bu boş dolgu Alanı Base
sonu's bellek düzeni. ekledi götürür Ekstra dolgu sözde kendilerini sınıf Base
nesneleri örneğini rolünü oynaren türetilmiş nesneleri.
Base b; // <- a most-derived object
Base a[10]; // <- an array of most-derived objects
"Temel sınıf içine Derived
, Base
gömülü sınıfın sonunda ekstra Dolgu için gerek yok. sınıf olarak" Base
embed ancak,
Derived d; // <- object `d` contains an embedded sub-object of type `Base`
Akıllı bir derleyici sınıf ekstra alan Derived
yerleştirerek bu alanı yeniden yerleşim alanı Base
Dolgu için kullanılan içine çalışacaktır. Senin durumunda ekstra alan Derived::f
Bu arada 4 bayt aynı boyut vardır, yani orada mükemmel bir şekilde uyar. Sonuç sınıfı toplam boyutu artmaz.
Çok benzer (doğada) etkisi denir yani "boş baz optimizasyonu". C herhangi bir türü için sizeof
boş bir sınıfı sizeof
Her zaman sıfırdan büyük olduğu anlamına gelir, 0, daha büyük olması sağlanır. Boş bir sınıf başka bir sınıf türetmek, ancak temel sınıf tam olarak türetilmiş bir sınıf boyutu 0 bayt katkıda gözlemek. Örneğin
struct A {};
struct B {};
struct C {};
struct D {};
struct F : A, B, C, D {
int i;
}
int main() {
std::cout << sizeof(A) << std::endl << sizeof(B) << std::endl <<
sizeof(C) << std::endl << sizeof(D) << std::endl;
std::cout << sizeof(F) << std::endl;
}
Her temel sınıf sizeof
sıfırdan büyük olmasına rağmen sizeof(F)
genelde hala eğer temel sınıf subobjects hiç var olmasa da sizeof(int)
, deÄŸerlendirir.
Diğer bir deyişle, bu gibi örneklerin gösterdiği gibi, temel sınıf subobjects en türetilmiş nesneleri daha bellek düzeni açısından kayda değer ölçüde daha rahat kuralları izleyin. Bu rahat kuralları kolayca temel sınıf sizeof
sadece kısmen türetilmiş sınıf sizeof
katkıda bulunacaktır durumlar neden olabilir.
Neden boyutu(x ) x artım değil mi?...
Neden't bir yapı her üyenin boyut...
Neden gcc eğer hız yerine BOYUTU için ...
Neden boyutu int boyutu(int) doÄŸru mu ...
Neden Twitter Bootstrap Yazı tipi Boyu...