最近在研究C++的object model,刚好看见几道关于sizeof的题目,做下来发现关于virtual关键字的class size并不是那么容易计算。还有编译器为了优化而产生的data padding也很tricky……
class A { int a; }; // sizeof(A) = 4
class B : A { int b; }; // sizeof(B) = 8
class C : A { int c; }; // sizeof(C) = 8
class D : B, C { }; // sizeof(D) = 16
class A { int a; }; // sizeof(A) = 4
class B : virtual A { int b; }; // sizeof(B) = 12
class C : virtual A { int c; }; // sizeof(C) = 12
class D : B, C { }; // sizeof(D) = 24
class A { int a; }; // sizeof(A) = 4
class B : A { int b; }; // sizeof(B) = 8
class C : A { int c; }; // sizeof(C) = 8
class D : virtual B,
virtual C { }; // sizeof(D) = ?
有幸觅得良文一章,如醍醐灌顶~愿共赏之
Estimate the Size of a Class/Object
Tutorial posted September 2nd, 2005 by girishshetty
Keywords:Memory Management
There are many factors that decide the Size of a/an Class/Object in C++. And they are:
. Size of All non-static Data Member
. Order of data members
. Byte Alignment or Byte padding
. Size of its immediate Base class.
. Any existence of virtual function(s) (Dynamic polymorphism using virtual).
. Compiler being used
. Mode of inheritance. (virtual inheritance)
评论