免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3149 | 回复: 26
打印 上一主题 下一主题

包含结构的结构的长度问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-28 23:10 |只看该作者 |倒序浏览
struct A{
int a;
int b;
}

struct B{
struct A a;
int c;
}

结果:
sizeof(struct A) == 4;
sizeof(struct B) == 8;   // 为什么多了两个字节?怎么算的?

在写文件操作时出现错误,苦苦找了半天,发现这个问题,大侠指教请。
谢谢。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-29 13:20 |只看该作者

包含结构的结构的长度问题。

16位的呀?怎么int都是两字节滴哩?

论坛徽章:
0
3 [报告]
发表于 2004-10-29 13:35 |只看该作者

包含结构的结构的长度问题。

哦,这个我随便举个例子,事实上我用的是sizeof,分别计算大结构中的各数据长度,总合比直接计算大结构长度小2个字节。

请指教,恭听~~~

论坛徽章:
0
4 [报告]
发表于 2004-10-29 13:49 |只看该作者

包含结构的结构的长度问题。

BTW:

教材上(应该是16位的吧):
short 2, int 2, long 4
32位平台:
short 2, int 4, long 4

是否仅 int 随16位与32位平台而变化? 它怎么总像是多余的?要么等价于short,要么等价于long?

论坛徽章:
0
5 [报告]
发表于 2004-10-29 15:23 |只看该作者

包含结构的结构的长度问题。

你在什么平台上计算的呀?
我用你的程序,在SCO UNIX 5.0.5上(32位)
结果  size(A) = 8  size(B) = 12,
没出现你说的结果呀

论坛徽章:
0
6 [报告]
发表于 2004-10-29 16:33 |只看该作者

包含结构的结构的长度问题。

字节对齐的问题,去google搜一下吧, 一大堆。

16位下 int  == short , 32位下 int == long 。
为什么会存在int ?
答案是:为了程序执行的效率, 字节对齐也是因为这个原因。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-10-29 16:35 |只看该作者

包含结构的结构的长度问题。

楼主的环境默认为4字节对齐了吧。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-10-29 18:03 |只看该作者

包含结构的结构的长度问题。

原帖由 "evice" 发表:
哦,这个我随便举个例子,事实上我用的是sizeof,分别计算大结构中的各数据长度,总合比直接计算大结构长度小2个字节。

请指教,恭听~~~
不能随便举例子,要根据自己的环境拿出实例.

BTW:

教材上(应该是16位的吧):
short 2, int 2, long 4
32位平台:
short 2, int 4, long 4

是否仅 int 随16位与32位平台而变化? 它怎么总像是多余的?要么等价于short,要么等价于long?
int长度在C++中保证不低于short的不大于long的.在C中应该也是这样吧,但一般而言32位系统都定义sizeof(int)==4的.

论坛徽章:
0
9 [报告]
发表于 2004-10-29 18:05 |只看该作者

包含结构的结构的长度问题。

明白了。
我的是Windows Server 2003 + Visual Studio .net 2003
默认好像就是4字节对齐。还是见识广一点好啊,我用结构写一个WAV文件,老出错,搞的我晕头转向。

谢谢大家。

论坛徽章:
0
10 [报告]
发表于 2004-10-29 23:29 |只看该作者

包含结构的结构的长度问题。

我也犯过这样的错误,呵呵.
找了很久,才忽然想起来是内存对齐的问题.
这应该是用IDE造成的后遗症吧.总是不关心编译器到底加了什么开关.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP