免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sunlink
打印 上一主题 下一主题

sizeof问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-10-15 21:35 |只看该作者
bash-2.05$ cat pack.c
#include <stdio.h>
int main(int argc, char **argv)
{
  struct node
  {
     double a;
     float b;
     int c;
     char d;
  }p;
  int k=sizeof(p);
  printf("length:%d\n",k);
}

bash-2.05$ gcc pack.c -o pack
bash-2.05$ ./pack
length:20
bash-2.05$

还有什么好说的?

论坛徽章:
0
12 [报告]
发表于 2006-10-15 22:21 |只看该作者
原帖由 飞灰橙 于 2006-10-15 14:44 发表
8位,16位,32位系统,都不一样的


正解

论坛徽章:
0
13 [报告]
发表于 2006-10-15 23:09 |只看该作者
原帖由 飞灰橙 于 2006-10-15 14:44 发表
8位,16位,32位系统,都不一样的

好像不同的编译器也会导致不同的结果。
同样是GCC不同的版本结果也不一样

论坛徽章:
0
14 [报告]
发表于 2006-10-16 15:09 |只看该作者
这题的答案取决于机器的字长。
对齐的目的是为了提高访问效率。因此,不是对齐到最大元素长度上,而是对齐到4字节。
在IA-32机器上,应该是8+4+4+4=20。

论坛徽章:
0
15 [报告]
发表于 2006-10-16 15:33 |只看该作者
rh, 32位机器上是20,四字节对齐,长度是20.

论坛徽章:
0
16 [报告]
发表于 2006-10-16 15:58 |只看该作者
结构的字节对齐应该是取元素对齐值最大的作为结构本身的对齐值。机器子长,编译器都会影响sizeof

论坛徽章:
0
17 [报告]
发表于 2006-10-16 19:11 |只看该作者
原帖由 Mellibra 于 2006-10-16 15:58 发表
结构的字节对齐应该是取元素对齐值最大的作为结构本身的对齐值。


同意,按理说是24,但为何gcc编译出来的结果是20呢?

是不是,机器子长,编译器都会影响sizeof  ?

敬请说清楚一些。

论坛徽章:
0
18 [报告]
发表于 2006-10-16 21:30 |只看该作者
原帖由 Mellibra 于 2006-10-16 15:58 发表
结构的字节对齐应该是取元素对齐值最大的作为结构本身的对齐值。机器子长,编译器都会影响sizeof

no, 数据结构的对齐是取机器的字长,IA32上就是4bytes.  double 是8bytes, 已经对齐,故其size无影响。
照你的理论,若结构中嵌套结构那内存岂不很容易用完。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP