内存对齐的规则

一、为什么要内存对齐

        简单来说,就是方便计算机去读写数据。

        对齐的地址一般都是 n(n = 2、4、8)的倍数。

        (1). 1 个字节的变量,例如 char 类型的变量,放在任意地址的位置上;

        (2). 2 个字节的变量,例如 short 类型的变量,放在 2 的整数倍的地址上;

        (3). 4 个字节的变量,例如 float、int 类型的变量,放在 4 的整数倍地址上;

        (4). 8 个字节的变量,例如 long long、double 类型的变量,放在 8 的整数倍地址上;

内存对齐的规则_第1张图片

 

二、内存对齐的三大规则:

第一规则: 内存中的偏移量是指成员变量的首地址相较于“0”地址处的距离,在结构体起始位置处存放的是结构体的第一个成员变量,偏移量为0,不论第一个结构体成员的大小,都是存放在0偏移量处。

第二规则: 对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。 在VS编译器下默认对齐数为8(单位byte/字节),在Linux中没有默认对齐数,对齐数就是成员的本身大小。

第三规则:   结构体的总大小,必须为最大对齐数(PPB)的整数倍大小, 而最大对齐数就为结构体成员中最大成员的大小。

你可能感兴趣的:(c语言,笔记)