免费注册 查看新帖 |

Chinaunix

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

数组名是左值(lvalue)的疑问 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-12-24 14:49 |只看该作者

回复 #17 thinshootout 的帖子

熊猫大哥不放看看这个:

  1. int a()
  2. {
  3.         int a[ 3 ] = { 10, 20, 30 };
  4.         int sum = a [ 0 ] + a[ 1 ];
  5.         return sum;
  6. }

  7. int c = 10;

  8. int main()
  9. {
  10.         a();   
  11. }
复制代码

编译 gcc filename.c -S

  1. .file   "a.c"
  2.         .text
  3. .globl a
  4.         .type   a, @function
  5. a:
  6.         pushl   %ebp
  7.         movl    %esp, %ebp
  8.         subl     $16, %esp
  9.         movl    $10, -16(%ebp)
  10.         movl    $20, -12(%ebp)
  11.         movl    $30, -8(%ebp)
  12.         movl    -16(%ebp), %edx
  13.         movl    -12(%ebp), %eax
  14.         leal    (%edx,%eax), %eax
  15.         movl    %eax, -4(%ebp)
  16.         movl    -4(%ebp), %eax
  17.         leave
  18.         ret
  19.         .size   a, .-a
  20. .globl c
  21.         .data
  22.         .align 4
  23.         .type   c, @object
  24.         .size   c, 4
  25. c:
  26.         .long   10  
  27.         .text
  28. .globl main
  29.         .type   main, @function
  30. main:
  31.         leal    4(%esp), %ecx
  32.         andl    $-16, %esp
  33.         pushl   -4(%ecx)
  34.         pushl   %ebp
  35.         movl    %esp, %ebp
  36.         pushl   %ecx
  37.         call    a
  38.         popl    %ecx
  39.         popl    %ebp
  40.         leal    -4(%ecx), %esp
  41.         ret
  42.         .size   main, .-main
  43.         .ident  "GCC: (GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)"
  44.         .section        .note.GNU-stack,"",@progbits
复制代码


中间把10, 20, 30放到哪里了?栈空间里面函数a的参数后面,无须符号表。

论坛徽章:
0
22 [报告]
发表于 2009-12-24 14:54 |只看该作者
按照我的理解,汇编里面的立即数,比如5阿,10阿,只能是右值;
汇编里的间接寻址,寄存器里的值是左值。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
23 [报告]
发表于 2009-12-24 19:58 |只看该作者
不知道为什么,对"左值"这个词一直感觉很陌生...

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
24 [报告]
发表于 2009-12-24 20:03 |只看该作者

回复 #5 thinshootout 的帖子

呃, 你所说的符号表, 是哪个符号表?
供链接器使用的? 还是供编译器使用的?

2l说的是供链接器使用的。
local_variable的符号也不需要暴露给链接器。
它们的地址是临时分配的, 指不定再哪。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP