结构体对齐

结构体的定义
结构体只占用是一种数据类型,是一种模板,不占用内存空间,结构体变量才占用内存空间
结构体对齐方式
从三点考虑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()在结尾应该加上这条指令表示作用范围

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值