本节内容 字节对齐
1、sizeof的使用 //----基本类型---- printf("%d\n",sizeof(char)); printf("%d\n",sizeof(short)); printf("%d\n",sizeof(int)); printf("%d\n",sizeof(long)); printf("%d\n",sizeof(__int64)); printf("%d\n",sizeof(float)); printf("%d\n",sizeof(double)); int x = 10; printf("%d\n",sizeof(x)); //----数组---- char arr1[10] = {0}; short arr2[10] = {0}; int arr3[10] = {0}; printf("%d\n",sizeof(arr1)); printf("%d\n",sizeof(arr2)); printf("%d\n",sizeof(arr3)); //----结构体---- struct Student { int x; int y; }; Student s; printf("%d\n",sizeof(Student)); printf("%d\n",sizeof(s));
2、什么是字节对齐呢? char x; short y; int z; 字节对齐: 一个变量占用 n 个字节,则该变量的起始地址必须是 n 的整数倍,即: 存放起始地址 % n = 0。 如果是结构体,那么结构体的起始地址是其最宽数据类型成员的整数倍。
3、结构体中的成员也遵守字节对齐吗? struct Test { char a; int b ; }; struct Test { int a ; __int64 b ; };
4、当对空间要求较高的时候,可以通过#pragma pack(n)来改变结构体成员的对齐方式 struct Test { char a ; int b ; }; #pragma pack() <1> #pragma pack(n)中n用来设定变量以n字节对齐方式,可以设定的值包括:1、2、4、8 ,VC编译器默认是8。 <2> 若需取消强制对齐方式,则可用命令#pragma pack()。 <3> 当n的值大于成员的宽度时,则按成员的宽度对齐。
5、结构体大小 #pragma pack(1) struct Test { char a ; int b ; char c ; }; #pragma pack() #pragma pack(2) struct Test { char a ; int b ; char c ; }; #pragma pack() #pragma pack(8) struct Test { char a ; int b ; char c ; }; #pragma pack() 结构体大总大小:N = Min(最大成员,对齐参数) 是N的整数倍
0512-57882866 www.bcdaren.com 昆山爱达人 1250121864 昆山爱达人信息技术有限公司 视频录制: 视频提供 视频录制: 联系电话: 0512-57882866 官网地址: www.bcdaren.com 联系公众号: 昆山爱达人 联系QQ: 1250121864 编程达人APP: