免费注册 查看新帖 |

Chinaunix

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

sizeof究竟是怎样实现的? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-06-12 12:22 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "飞灰橙" 发表:
YPE_T;

sizeof (TYPE_T) = ?

有什么奇怪之处?

论坛徽章:
0
32 [报告]
发表于 2005-06-12 12:41 |只看该作者

sizeof究竟是怎样实现的?

第一次把C的历史了解得这么清楚!!
呵呵.....~~~
很感兴趣!!
努力学习!!

论坛徽章:
0
33 [报告]
发表于 2005-06-12 14:51 |只看该作者

sizeof究竟是怎样实现的?

学习了,学习了!

不过不值得为这个sizeof()运算符争成这样吧?

要不贴出来源码看看!

论坛徽章:
0
34 [报告]
发表于 2005-06-13 09:20 |只看该作者

sizeof究竟是怎样实现的?

同意楼主

论坛徽章:
0
35 [报告]
发表于 2005-07-01 15:08 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "seeLnd" 发表:

有什么奇怪之处?


我在這邊試驗結果
有的編譯器出來是2,
有的是4,
都是編的32位的代碼.

论坛徽章:
0
36 [报告]
发表于 2005-07-02 12:33 |只看该作者

sizeof究竟是怎样实现的?

原帖由 "飞灰橙" 发表:


我在這邊試驗結果
有的編譯器出來是2,
有的是4,
都是編的32位的代碼.


加上__attribute__((packed))肯定就都是2了。

论坛徽章:
0
37 [报告]
发表于 2005-07-02 16:28 |只看该作者

sizeof究竟是怎样实现的?

看了思一克的代码,编译了一下,看了个究竟

  1. void f(int len)
  2. {
  3.         char array[len];
  4.         array[0]='a';
  5.         printf("sizeof array=%d\n",sizeof(len));
  6. }
复制代码


编译后

  1.         .file        "test.c"
  2.         .section        .rodata
  3. .LC0:
  4.         .string        "sizeof array=%d\n"
  5.         .text
  6. .globl f
  7.         .type        f, @function
  8. f:
  9.         pushl        %ebp
  10.         movl        %esp, %ebp
  11.         pushl        %ebx
  12.         subl        $4, %esp       
  13.         movl        %esp, %ebx
  14.         movl        8(%ebp), %eax        //取len到eax
  15.         decl        %eax
  16.         incl        %eax
  17.         addl        $15, %eax        //和下边三句合起来做16字节对齐,不知道干啥
  18.         shrl        $4, %eax        //
  19.         sall        $4, %eax        //
  20.         subl        %eax, %esp        //分配动态数组
  21.         movl        %esp, %eax        //接下来的代码就容易看了
  22.         movb        $97, (%eax)
  23.         subl        $8, %esp
  24.         pushl        $4
  25.         pushl        $.LC0
  26.         call        printf
  27.         addl        $16, %esp
  28.         movl        %ebx, %esp
  29.         movl        -4(%ebp), %ebx
  30.         leave
  31.         ret
  32.         .size        f, .-f
  33.         .section        .note.GNU-stack,"",@progbits
  34.         .ident        "GCC: (GNU) 3.3.2 20031022 (Red Hat Linux 3.3.2-1)"
复制代码


如果不是大家争论,还真不知道有这种用法,汗阿[/code]

论坛徽章:
0
38 [报告]
发表于 2005-07-02 18:35 |只看该作者

sizeof究竟是怎样实现的?

对于变量求大小,就是查符号表的得到的。所以在宏定义中规定了不能使用sizeof运算符,因为那时符号表还没有填入东西。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
39 [报告]
发表于 2005-07-02 18:48 |只看该作者

sizeof究竟是怎样实现的?

[quote]原帖由 "SANFXUNIL"]对于变量求大小,就是查符号表的得到的。所以在宏定义中规定了不能使用sizeof运算符,因为那时符号表还没有填入东西。[/quote 发表:

这个有关系吗?
我经常在宏中用sizeof,没觉得有什么问题呀!

论坛徽章:
0
40 [报告]
发表于 2005-12-08 23:36 |只看该作者
我认为是不同的系统下有不同,好象较早期的是2,后来是4,新的有的是8
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP