C++ 内存对齐问题

来源:互联网 发布:ftp 防火墙 开放的端口 编辑:程序博客网 时间:2024/06/05 17:15

C和C++不同:在C中struct/class不占有内存,C++中,struct/class通常占有1byte,原因是编译器强 行在里面放了一个char,这样可使这个class的不同实例化在内存中分配到独一无二的地址
1、最基本的内存对齐情况
首先确定最大类型的大小->按照结构体中类型声明顺序来分配空间。

    eg1.    struct A                                      {        char c;    //1byte        double d;  //8byte        int i;      //4byte     }    sizeof (A)=24;      (1+7+8+4+4)    eg2.             struct A                                      {        double d;  //8byte         char c;    //1byte        int i;      //4byte     }    sizeof (A)=16;      (8+1+4+3

2、稍复杂一点的内存对齐情况

    class A    {    public:          static double dd;              char c;     //1byte          double  d;    //8byte          static A a;            int i;      //4byte    };    sizeof (A)=24;      (1+7+8+4+4

3、内存对齐深入情况

class  A    {    public:        virtual ~A();          char c;      //1byte        double d;    //8byte        int i;          //4byte    }32位系统:预先给vptr分配4byte的空间 。sizeof (A)=24;      (4+1+3+8+4+464位系统:预先给vptr分配8byte空间。   sizeof (A)=32;      (8+1+7+8+4+4
0 0
原创粉丝点击