内存对齐: 结构体和位段大小的计算

内存对齐出现的背景: 现代CPU会以双字节,四字节,八字节...偶数倍的字节大小存取内存块.如果一个数据没有对齐,则会导致CPU多次存取内存的现象,影响系统效率。

内存对齐: 将数据以内存对齐规律存放,提高CPU的存取效率。

 

结构体大小:
1.第一个成员从偏移量为0的地址开始

2.其他成员大小:

其他成员变量要对齐到对齐数的整数倍的地址处。

对齐数=min ( 该成员大小,默认对齐数 )。    VS中默认的值是8,(32位cpu)Linux中的默认值是4。

3.结构体的总大小:

是最大对齐数的整数倍 

4.如果嵌套了结构体:

嵌套的结构体要对齐到自己最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。


位段大小:
1.位段每次都会分配位段的类型大小的内存块

2.位段每次从右向左分配

3.如果放不完,则开辟新的空间

4.   struct s{

         char a:1; 

         char : 0;

         char b;

      };

    无名位域 :0  会强迫下一个位域内存对齐 ; a:1 表示a占的1个bit大小 ;  b表示默认占一个字节的内存

posted @ 2020-02-11 16:36  Duikerdd  阅读(299)  评论(0编辑  收藏  举报