首页 > 代码库 > 内存对齐问题的解析

内存对齐问题的解析

      存储器的内存布局一般都是对齐的,即是按字对齐或半字对齐的方式访问的,优点是可以避免内存的浪费同时也有很高的内存操作和数据处理的速度。

      如果访问非对齐的内存数据:

  1. 产生不可预测的结果;
  2. 忽略造成访问不对齐的低地址位;
  3. 上一步后,使这些低地址位控制装载数据循环后移。

先看下面这些问题,你都知道这些结构体所占内存的大小以及结构体成员的实际内存分布吗?

结构体所占内存和实际使用内存是两个完全不同的概念,

结构体所占内存大小可以使用sizeof(type)测出,而实际使用的内存大小必须通过offsetof(type,member)测量偏移量来计算。使用说明如下:

下面是一些练习:

 1 /*所占内存大小为8个字节*/ 2 struct node1 3 { 4     int a;       5     char b;      6     char c;      7 }stu1; 8 /*所占内存大小为12个字节*/ 9 struct node210 {11     char b;12     int a;13     char c;14 }stu2;15 /*所占内存大小为6个字节*/16 struct node317 {18     char a;19     short b;20     char c;21 }stu3;22 /*所占内存大小为24个字节*/23 struct node424 {25     long a;26     char *b;27     short c;28     char d;29     short array[5];30 }stud431 /*这里含有柔性数组(不占内存),所占内存大小为8个字节*/32 struct node533 {34     int a;35     char c;36     int array[];37 }stu5;

 

内存对齐问题的解析