Presentation is loading. Please wait.

Presentation is loading. Please wait.

本节内容 字节对齐.

Similar presentations


Presentation on theme: "本节内容 字节对齐."— Presentation transcript:

1 本节内容 字节对齐

2 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));

3 2、什么是字节对齐呢? char x; short y; int z; 字节对齐: 一个变量占用 n 个字节,则该变量的起始地址必须是 n 的整数倍,即: 存放起始地址 % n = 0。 如果是结构体,那么结构体的起始地址是其最宽数据类型成员的整数倍。

4 3、结构体中的成员也遵守字节对齐吗? struct Test { char a; int b ; }; struct Test { int a ; __int64 b ; };

5 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的值大于成员的宽度时,则按成员的宽度对齐。

6 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的整数倍

7 0512-57882866 www.bcdaren.com 昆山爱达人 1250121864 昆山爱达人信息技术有限公司 视频录制:
视频提供 视频录制: 联系电话: 官网地址: 联系公众号: 昆山爱达人 联系QQ: 编程达人APP:


Download ppt "本节内容 字节对齐."

Similar presentations


Ads by Google