结构体的定义
结构体只占用是一种数据类型,是一种模板,不占用内存空间,结构体变量才占用内存空间
结构体对齐方式
从三点考虑1.占用内存大小
2.cpu执行效率
3.跨平台移植
方式1、结构体变量首地址必须是结构体内部最大基本数据类型的整数倍
2、结构体成员的偏移量必须为本成员基本数据类型的整数倍(偏移量是此成员到首地址的大小)
3、结构体变量的大小必须是结构体内最大基本数据类型的整数倍
原因:1、从cpu执行效率上来看
由于cpu进行内存数据的读取是以机器字为单位读取的,那么会产生一个问题,如果你想读取一个整形变量(4个字节),恰好整型变量的前两个字节在第一个机器字中,后两个字节在后一个机器字中,那么机器需要进行两次读,并且将得到的数据拼接成一个整型,那么cpu的效率会降低,时间也会边长。
例如:如果你想读取一个字节,而机器字的大小为八个字节,那么cpu会按照起始地址读取八个字节,并且舍弃其余七个不要的字节。你需要的字节可以是八个字节中的任何一个。
2、由于机器是按照2,4,8的倍数来读取字节,那么一定会要求各种数据类型的按照一定空间排序,减少原因1中的情况出现,因此需要进行对齐操作。
3,在跨平台移植的过程中,如果字节对齐方式不一致,则会出现编译问题,造成传入的数据和编译后的数据不一致的问题。
指定对齐值
#pragma pack(n)
其中n为指定的对齐字节大小,n可取1,2,4,8
这是一条预编译指令,会在预编译过程中,指定程序的对齐方式
#pragma pack()在结尾应该加上这条指令表示作用范围