首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于字节对齐,该怎么解决

2012-02-26 
关于字节对齐有如下代码:#pragmapack(4)structtest{chara[4]shortb}intmain(intargc,char*argv[]){struc

关于字节对齐
有如下代码:
#pragma   pack(4)
struct   test
{
    char   a[4];
    short   b;
}

int   main(int   argc,   char   *argv[])
{
    struct   test   hi;
    printf( "sizeof(struct   test):%d\n ",   sizeof(struct   test));
}
#pragma   pack()

为什么输出是6呢?4字节对齐应该大小是4的倍数吧?
希望解答,谢谢

[解决办法]
short 占两个字节
char 站1个
char aa[4] 占四个 刚好是2的倍书
所 2+ 4 ==6
[解决办法]
是根据单位字节最大的来对齐的
你的结构体中,最大的是short类型,因此是按照2字节对齐
[解决办法]
你的结构体内最大的是short类型的,它占用2个字节的内存,所以结构体的大小是2的倍数才对,所以结果是6。
[解决办法]
来有一点要记住
当#pragma pack(n)中的N大于你结构中占字节最多的那个类型时,无意义,用最大类型字节代替
就像楼主的代码 最大字节数是2(SHORT) 但你却#pragma pack(4) 结果还是按2来对器
所以结果是6

热点排行