C++内存对象布局

本章主要介绍了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而由内部产生的任何额外负担.

 

    

 

posted @ 2014-10-23 16:46  晓风_7  阅读(238)  评论(0)    收藏  举报