导航:首页 > 操作系统 > linux结构体字节对齐

linux结构体字节对齐

发布时间:2022-09-23 17:48:14

A. 结构体的定义为什么要字节对齐

结构体所占的内存空间在理论上是等于它所包含的所有数据元素的,但在实际操作中像vc++6.0和c++bulider默认的都是8字节对齐,所以导致二者所占内存空间不一致。你可以在setting选项中将字节对齐方式设置为1字节对齐。

B. 结构体成员的字节对齐

这个问题都很有深度啊;

首先我要说的是,字节对齐在不同编译器下语法是不一样的,在GCC中是#pragma push(1) #pragma pack(); 在MS C++中用VC的代码项里可以调整,默认是8字节;

typedef struct
{
char c;
int i;
}test;

字节对齐,是对齐,比如说char 与 int 如果是4字节对齐,那么char也会占用4个字节,总共占8字节,而且结构体对象存储是按照顺序存的,char 肯定在int前面。第二种情况如果1字节对齐,意味着char只占1字节,而结下来int会占用4字节,这个N字节对齐的意思是,每个成员占用空间必须是N字节的倍数,不足N字节的占用N字节。那么以1字节对齐那它占用5个字节。

还有你说的每种数据是低位还是高位在前,这个根处理器有关,Intel处理是小端对齐,比如说一个整数522387969用16进制表示是:0x1f 23 02 01,在Intel处理器中表示是0x01 02 23 1f,所以在内存用0x01 02 03 1f来示522387969,这就是所谓有小端对齐;但在arm处理器中522387969表示是0x1f 23 02 01,这就是所谓的大端对齐,这种方式又叫作网络字节序。

当然前面说的字节序只是对int long short这些内置(built in)数据类型用效,对结构体内如果有int long这类成员也会有所谓的字节序,如前面所说,不管是什么序结构体对象存储是按照顺序存,先定义的成员肯定在后定义的成员前面,但单个成员有字节序,不知这样说,你的明白?

不是,请仔细体会这句话:这个N字节对齐的意思是,每个成员占用空间必须是N字节的倍数,不足N字节的占用N字节。

大于N字节就凑够N字节的倍数,比如按3字节对齐,那么一个4字节的int将占据6字节~

阅读全文

与linux结构体字节对齐相关的资料

热点内容
加密货币支付对虚拟币的影响 浏览:739
国外3d解压视频 浏览:622
组态王app怎么复制图像 浏览:226
美国怡口净水器压缩活性炭 浏览:249
启动选项命令 浏览:905
php在线下单系统源码 浏览:684
windows视频压缩 浏览:389
蚂蚁保护板蓝牙app如何连接电池 浏览:293
迪哥的我的世界服务器叫什么 浏览:983
数据结构与算法分析java习题答案 浏览:490
pdf服务器 浏览:796
cef平衡算法 浏览:435
安卓手机如何打开272文件 浏览:27
如何找到电脑里自己隐藏的文件夹 浏览:834
设置服务器的无后缀地址访问 浏览:402
安卓版推特为什么会闪退 浏览:720
中国编译局级别 浏览:383
机战单机命令 浏览:463
服务器如何访问indexhtml 浏览:764
企鹅程序员 浏览:943