本章主要介绍了c++类中成员变量、函数对象的在内存中布局.
当c++类中不包含virtual机制类的函数时,内部nostatic member被包含在每一个class object之中,就想c struct一样,而member function虽然含在class声明之内,却不出现在object之中,每一个non-inline function只会诞生一个函数体。
c++内存上的布局以及存取时间主要的额外负担是由virtual引起的,包括:
- virtual function 机制 用以支持一个有效率的"执行期绑定"(runtime binding).
- virtual base class 用以实现"多次出现在继承体系中的base class,有一个单一而被共享的实体.
class Point{ public: Point(float xval); virtual ~Point(); float x() const; static int PointCount(); protected: virtual ostream& print(ostream& os) const; float _x; static int _point_count; };
(1)c++对象模型
内存布局
一个对象需要多少内存才能表现一个class object的大小:
- nonstatic data members的总和大小
- 加上任何由于alignment的需求而填补上去的空间.
- 加上为了支持virtual而由内部产生的任何额外负担.