LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1877|回复: 2

关于字节对齐的问题(gcc/arm-linux-gcc)

[复制链接]
发表于 2007-2-1 15:19:54 | 显示全部楼层 |阅读模式
定义了这样一个结构体:
#include <stdlib.h>
int main()
{
typedef struct tagRGBTRIPLE {
    unsigned char  rgbtRed;
    unsigned char  rgbtGreen;
    unsigned char  rgbtBlue;
} RGBTRIPLE;

printf("struct size = %d.\n", sizeof(RGBTRIPLE));
}
编译 gcc -o test test.c /arm-linux-gcc -o test test.c
分别求结构体的大小:
gcc 显示大小为3, 版本3.2.2(RH9) 和3.4(FC3)都一样
arm-linux-gcc 显示大小为4,版本为3.3.2

为什么会这样了。我在结构体定义上加上#pragma  pack(1) 也不管用,
大家有没有遇到这样问题的??多谢
发表于 2007-2-2 22:14:48 | 显示全部楼层
手工改改,踏实

typedef struct tagRGBTRIPLE {
    unsigned char  rgbtRed;
    unsigned char  rgbtGreen;
    unsigned char  rgbtBlue;
#ifdef ARM_PACK
   unsigned char noUse;
#endif
} RGBTRIPLE;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-1 17:27:40 | 显示全部楼层
申明结构体的时候添加字节对齐
struct tagRGBTRIPLE {
    unsigned char  rgbtRed;
    unsigned char  rgbtGreen;
    unsigned char  rgbtBlue;
}__attribute__((packed,aligned(1)));

这样用arm-linux-gcc求长度时就是3了。
网上说这样使用会影响性能,我没有继续测试,有兴趣的可以比较一下。
回复 支持 反对

使用道具 举报

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

本版积分规则

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