字节对齐实例
2017-09-13 19:56
232 查看
1: char a: sizeof(a) = 1;
2: int a : sizeof(a) = 4;
3: short a: sizeof(a) = 2;
4: long a: sizeof(a) = 4;
5: double long a: sizeof(a) = 8;
6: float a: sizeof(a) = 8;
输入结果为 8 12
为了对齐需要补齐
对齐的概念:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特
定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐
2: int a : sizeof(a) = 4;
3: short a: sizeof(a) = 2;
4: long a: sizeof(a) = 4;
5: double long a: sizeof(a) = 8;
6: float a: sizeof(a) = 8;
#include <stdio.h> #pragma pack(2) struct A { int a; char b; short c; }; #pragma pack() #pragma pack(4) struct B { char b; int a; short c; }; #pragma pack() int main() { printf(“sizeof(A)=%d,sizeof(B)=%d\n”,sizeof(A),sizeof(B)); return 0; }
输入结果为 8 12
1 | 2 | 3 | 4 | 1 | 1 | 2 | 0 | ||||
1 | 0 | 0 | 0 | 1 | 2 | 3 | 4 | 1 | 2 | 0 | 0 |
对齐的概念:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特
定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐