2016 - 2024

感恩一路有你

c语言结构体对齐规则 结构体成员的字节对齐?

浏览量:1266 时间:2021-03-15 22:16:30 作者:admin

结构体成员的字节对齐?

��个问题都很有深度啊;首先我要说的是,字节对齐在不同编译器下语法是不一样的,在GCC中是#pragmapush(1)#pragmapack()在MSC 中用VC的代码项里可以调整,默认是8字节;typedefstruct{charcinti}test字节对齐,是对齐,比如说char与int如果是4字节对齐,那么char也会占用4个字节,总共占8字节,而且结构体对象存储是按照顺序存的,char肯定在int前面。第二种情况如果1字节对齐,意味着char只占1字节,而结下来int会占用4字节,这个N字节对齐的意思是,每个成员占用空间必须是N字节的倍数,不足N字节的占用N字节。那么以1字节对齐那它占用5个字节。还有你说的每种数据是低位还是高位在前,这个根处理器有关,Intel处理是小端对齐,比如说一个整数522387969用16进制表示是:0x1f230201,在Intel处理器中表示是0x0102231f,所以在内存用0x0102031f来示522387969,这就是所谓有小端对齐;但在arm处理器中522387969表示是0x1f230201,这就是所谓的大端对齐,这种方式又叫作网络字节序。当然前面说的字节序只是对intlongshort这些内置(builtin)数据类型用效,对结构体内如果有intlong这类成员也会有所谓的字节序,如前面所说,不管是什么序结构体对象存储是按照顺序存,先定义的成员肯定在后定义的成员前面,但单个成员有字节序,不知这样说,你的明白?不是,请仔细体会这句话:这个N字节对齐的意思是,每个成员占用空间必须是N字节的倍数,不足N字节的占用N字节。大于N字节就凑够N字节的倍数,比如按3字节对齐,那么一个4字节的int将占据6字节~

c语言结构体对齐规则 c语言结构体对齐 QT下的结构体对齐

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。