QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1168|回复: 5

求救:关于结构体数据长度的补位问题

[复制链接]
发表于 2003-10-16 17:32:08 | 显示全部楼层 |阅读模式
各位高手:我定义了一个结构体,结果这个结构体用sizeof()求出来的数据长度和我自己求出来的不一样,是不是存在补位的问题啊?如果是,补位是有什么决定的呢?怎么能避免补位呢?
还有,就是在不同的系统平台是不是补位的产生也不一样呢?比如ppc和x86

谢了先!!!!
发表于 2003-10-17 11:15:39 | 显示全部楼层
编译器要对齐的。
回复

使用道具 举报

发表于 2003-10-17 17:13:34 | 显示全部楼层
如果要避免字节对齐,对于gcc 可以使用packed
写成这样:
struct xxx{
    int aa;
    char bb;
} __attribute__((packed));

其他编译器也是通过类似的关键字来支持。
回复

使用道具 举报

发表于 2003-10-19 03:29:42 | 显示全部楼层
#pragma pack(1)
回复

使用道具 举报

发表于 2003-10-20 09:48:00 | 显示全部楼层
如上 可以指定几个字节对齐的结构的 但是如果在32位结构下用单字节对齐的几个公共变量 常常有读写偏掉的问题 建议就用4字节对齐 算好了边界 加上几个填充变量就好 一半也不会在乎这么2-3个字节的消耗
回复

使用道具 举报

发表于 2003-10-20 13:03:09 | 显示全部楼层
如果要通过网络传递二进制数据,或者要读写硬件,就要在乎了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-13 04:27 , Processed in 0.042731 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表