关于结构体对齐的问题

   最近在一套在线笔试题上看到了一道题,题目的大概内容是如下,求该结构体的大小
typedef struct{
	char a;
	int b;
	float c;
	double d;
	char *p;
	int * q;
	short r;
}node;

  在之前也有对结构体的端对齐有所了解,默认是8字节对齐方式(vc6),但是忘记了具体的细节。所以之后又搜索了一些相关的资料,参考<a target=_blank href="http://blog.sina.com.cn/s/blog_5f77c7270100dnoy.html">点击打开链接</a>,之后自己再测试并总结一下。
例如上述的结构体我在vc6下测试,结果输出的是40。
以下是在vc6下测试并总结出的。
 #include <stdio.h>
#pragma pack (4)//设置n字节对齐的,详细可以参考上述的链接,感谢大神写的文章,解释的很清楚

typedef struct{
    char a;//1字节
    int b;//4
    float c;//4
    double d;//8
    char *p;//4
    int * q;//4
    short r;//2
    //按一字节对齐方式为27
    //按4字节对齐方式为32  1+3 + 4 +4+ 8(此处不用将偏移量补为8的倍数,只需补为4字节对齐的4的倍数)+4+4+2=30然后还需将整个结构体补为4的倍数,所以再加上2
    //按8字节及16字节方式都为40
    //计算方法是:1+3+4+4+4(这个4是为了补齐8的倍数,在8字节类型出现之前只需补齐4字节即可)+8+4+4+2=34为补齐8的倍数再加上6=40
}node;
#pragma pack ()   //取消自定义字节方式
int main(){
    printf("%d\n",sizeof(node));
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值