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语言深度解剖读书笔记(3.结构体中内存对齐问题)

很多人都觉得内存对齐这个问题很难,很不好算,总算错,其实我想说只要你画一画就没那么难了。好了,进入正题。 本节知识点: 1.结构体为什么要内存对齐(也叫字节对齐): 其实我们都知道,结构体只是一...
  • qq418674358
  • qq418674358
  • 2013年08月24日 00:28
  • 6353

C++类的内存对齐-C++alignment

在C++中的某一个类的内存大小是由以下三部分组成: 1:nonstatic data member的总和大小 2:alignment所填补的空间,可能存在于members之间,也可能是类的边界 3:为...
  • yinjun66
  • yinjun66
  • 2017年04月08日 11:19
  • 334

C/C++ 内存对齐原则及作用

struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成...
  • chy19911123
  • chy19911123
  • 2015年10月04日 09:50
  • 4215

C/C++中的结构体对齐问题(内存对齐)

由于程序运行时占用的内存过大,所以想办法给程序瘦身。在调试中发现结构体占用的size竟然和预想的不一样,原来…… 看看下面讲的吧,肯定会不枉此看哦! 1,比如: struct{    short a1...
  • fyh2003
  • fyh2003
  • 2011年06月26日 19:50
  • 3919

C++之内存对齐原则

首先由一个程序引入话题:  1 //环境:vc6 + windows sp2  2 //程序1  3 #include   4   5 using namespace std;  6 ...
  • Mary19920410
  • Mary19920410
  • 2017年04月14日 19:04
  • 899

YUV转RGB函数

以下是YUV420转RGB24函数,有试过可以的,其中参数src0 是Y量的起始指针, src1 是U量的起始指针 , src2是 V量的起始指针dst_ori 是RGB buffer的起始指针wid...
  • zsJum
  • zsJum
  • 2007年11月18日 14:18
  • 8066

C++类空间大小关于内存对齐的学习

1.空类空间大小为1,为什么,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以空类所占的内存大小是1...
  • richer1015
  • richer1015
  • 2016年06月30日 13:16
  • 378

C++之:类对象内存对齐

一、关于空间的思考一个Class对象需要占用多大的内存空间。最权威的结论是: *非静态成员变量总合。(not static) *加上编译器为了CPU计算,作出的数据对齐处理。(c语言中面...
  • Scythe666
  • Scythe666
  • 2016年03月26日 09:55
  • 814

struct成员的内存对齐问题:

1、自然对齐:及默认结构体变量成员中最大的长度设置为对齐字节 如: struct node { char a; int b; short c; };默认以最大长度i...
  • u014170207
  • u014170207
  • 2016年11月10日 11:59
  • 492

关于内存对齐的问题

在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的 “管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置...
  • u011939264
  • u011939264
  • 2016年05月31日 21:33
  • 926
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 内存对齐问题
举报原因:
原因补充:

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