请教:对sizeof的疑问
我现在有一个结构,为什么sizeof()计算出来的和我想的不一样呢?
struct h2_t
{
char a[6]; // 6
char b[16]; // 16
unsigned char c; // 1
unsigned int d; // 4
};
在我的机器上,win2000, vc6, h2_t打印出的的大小是 28
而我想应该是 6+16+1+4 = 27,
奇怪, 大家说为什么呀?
谢谢!
问题点数:100、回复次数:7Top
1 楼ciml(镜子)回复于 2002-03-06 11:53:48 得分 45
28是因为机器字节对齐的原因,主要是为了提高数据传输速度
如果大小不是4的整数倍,会自动补齐为4的整数倍
你上面是27,那么自动补齐一字节为28正好是4的7倍
如果是26,25,同样sizeof出来是28,都要补齐为4的整数倍Top
2 楼G_zcm(黑骑士)回复于 2002-03-06 11:56:27 得分 0
Study!Top
3 楼sticker(了了)回复于 2002-03-06 12:01:58 得分 5
同意ciml说的。所以编程时都不要画蛇添足自己数位数,用sizeof是最好的。Top
4 楼h2plus0(~~~)回复于 2002-03-06 12:04:09 得分 0
天啊, 象这样的话, 那sizeof根本就没用拉,
如果考自己计算的话, 但是有时如果改动了一下定义的结构, 那样程序又会有许多地方要更改, 我该这么样才能比较好的处理这种问题呢?
谢谢 ciml(镜子) 先!
Top
5 楼leojay(leojay)回复于 2002-03-06 12:07:28 得分 5
那就不要自己计算了呀Top
6 楼lightning(lightning)回复于 2002-03-06 12:15:21 得分 45
没有关系, 还是可以自己算的,只要在多平台编程时注意到就可以了.
你也可以选择你需要的对齐子节数e.g,#pragma pack(1).
sizeof涉及struct的内存结构是编译器相关的.Top
7 楼h2plus0(~~~)回复于 2002-03-06 12:45:09 得分 0
我明白了 , 谢谢大家了!
Top




