C++ 内存对齐及空类大小

来源:互联网 发布:传感器数据采集器 编辑:程序博客网 时间:2024/06/05 10:12

一、类

1.类使用了c++封装的特性,将变量和函数封装在其内部,成为成员变量和成员函数,并用public、protect、private这三个访问限定符,决定是否可以在类外访问成员变量和函数,

public可以在类外访问,其他不行。另外class默认是private的,struct默认是public的。

2.类产生了一个新的作用域。

3.用类类型创建对象的过程称为类的实例化

二、内存对齐

先讲一下为什么要内存对齐?

1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常

2.硬件原因:内存对齐后,CPU访问内存的速度大幅提升(CPU访问内存是按2,4,8,16等块大小来访问的)

对齐规则:

1.变量小于默认对齐数

   首先一个变量存入内存,成员变量根据自己大小和前一个对比,如果默认对齐数减去前一个成员变量之后剩余的大小大于此成员变量的大小,则从首地址开始,以第二个变量为单位跳过一个或若干个来连续存放(这些话比较啰嗦,结合底下的代码和图,理解更佳

2.变量大于默认对齐数

   直接以默认对齐数为单位跳过,然后存放

3.最终大小必须是默认对齐数(<=最大变量)的整数倍、或最大变量(<=默认对齐数)的整数倍

class A{char i = 1 ;short  b = 2;int k = 1;int j = 3;};

该类的大小即为12字节

class B{char i = 1 ;short  b = 2;double  j = 3;};

此类的大小即为16字节(这里double的存储方式有些奇怪,但不影响大小计算)

三、空类大小为1,要插入一个char类型的指针来标识一个唯一的对象


原创粉丝点击