C++结构体大小问题

struct UpdateInfo
{
	DWORD	dwseq;			//更新序列号,4
	time_t	pub_time;		//发布时间,8
	ULONG	publisher;		//发布者,
	BYTE	reserved[500];		//500
};
在写文件时,发现sizeof( UpdateInfo ) = 520.可是我的结构体大小明明只有516,这让我很疑惑,多次调试仍然没有头绪。

百度发现是字节对齐的问题。

C++编译器编译时默认对齐方式,且对齐时有三个准则:

1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量(offset,即每个成员的起始地址)都是成员自身大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
注意:当结构体成员里面有数组成员时,如int a[10],要看成10个整形变量才参与计算。


另附测试实例:

//sizeof( st1 ) = 4
struct st1
{
	char	c1;	//1
	char	c2;	//1
	short	s1;	//2
};
//sizeof( st2 ) = 6
struct st2
{
	char	c1;	//1
	short	s1;	//2
	char	c2;	//1
};
//sizeof( st3 ) = 12
struct st3
{
	char	c1;	//1
	int	i1;	//4
	char	c2;	//1
};

参考: http://blog.163.com/kmustchenb@126/blog/static/1109057652010912111556865/

http://blog.sina.com.cn/s/blog_720db2640100lbs4.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值