C++ 内存对齐问题

原创 2016年08月29日 14:57:57

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

相关文章推荐

c++内存中字节对齐问题详解

  • 2013年03月02日 19:34
  • 32KB
  • 下载

C++测试类大小中的内存对齐问题

# include using namespace std; class A{ public : int b; void test() ...

c++内存中字节对齐问题详解

一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问...
  • xlxying
  • xlxying
  • 2011年08月31日 17:27
  • 171

C++:struct和union 内存字节对齐问题

struct内存对齐问题1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始...

关于C++内存中字节对齐问题的详细介绍

一、什么是字节对齐 计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据...

C++内存对齐问题

在C语言和C++语言中相信很多人都有使用过sizeof(),这个帖子主要偏向于交流获取class和struct的字节数时候的问题。       我使用的是windows 7的32位OS 和 ...
  • l2show
  • l2show
  • 2012年03月26日 17:20
  • 11281

c++内存中字节对齐问题详解

一、什么是字节对齐,为什么要对齐?         现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定...

c++内存对齐问题

转载自:http://blog.csdn.net/l2show/article/details/7395777 在C语言和C++语言中相信很多人都有使用过sizeof(),这个帖子主...

c++内存中字节对齐问题详解 [ 转载 ]

一、什么是字节对齐,为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存...

C/C++中结构体与类成员变量在存储上的内存对齐问题

很多同学会遇到一个问题,为什么在结构中或类中定义的成员变量大小总和跟自己预期的可能会不一样,问题就在于系统在存储结构或类时涉及到一个内存对齐的问题,下面将讲解该问题。 因为结构体成员变量与类成员变量在...
  • Kellery
  • Kellery
  • 2017年04月07日 18:55
  • 296
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 内存对齐问题
举报原因:
原因补充:

(最多只允许输入30个字)