跳至主要内容

The Size of a Class/Object

最近在研究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:

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)

评论