免费注册 查看新帖 |

Chinaunix

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

[C] 请教有关栈帧大小对齐的问题 [复制链接]

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
21 [报告]
发表于 2013-09-30 10:50 |只看该作者
回复 14# chenzhanyiczy
gcc-4.6.3
前一个
  1. 08048394 <func1>:
  2. 8048394:        55                           push   %ebp
  3. 8048395:        89 e5                        mov    %esp,%ebp
  4. 8048397:        5d                           pop    %ebp
  5. 8048398:        c3                           ret   

  6. 08048399 <func2>:
  7. 8048399:        55                           push   %ebp
  8. 804839a:        89 e5                        mov    %esp,%ebp
  9. 804839c:        e8 f3 ff ff ff               call   8048394 <func1>
  10. 80483a1:        5d                           pop    %ebp
  11. 80483a2:        c3                           ret   

  12. 080483a3 <main>:
  13. 80483a3:        55                           push   %ebp
  14. 80483a4:        89 e5                        mov    %esp,%ebp
  15. 80483a6:        e8 ee ff ff ff               call   8048399 <func2>
  16. 80483ab:        5d                           pop    %ebp
  17. 80483ac:        c3                           ret   
  18. 80483ad:        90                           nop
  19. 80483ae:        90                           nop
  20. 80483af:        90                           nop
复制代码
后一个
  1. 08048394 <main>:
  2. 8048394:        55                           push   %ebp
  3. 8048395:        89 e5                        mov    %esp,%ebp
  4. 8048397:        83 e4 f0                     and    $0xfffffff0,%esp
  5. 804839a:        e8 02 00 00 00               call   80483a1 <func2>
  6. 804839f:        c9                           leave  
  7. 80483a0:        c3                           ret   

  8. 080483a1 <func2>:
  9. 80483a1:        55                           push   %ebp
  10. 80483a2:        89 e5                        mov    %esp,%ebp
  11. 80483a4:        83 ec 08                     sub    $0x8,%esp
  12. 80483a7:        e8 02 00 00 00               call   80483ae <func1>
  13. 80483ac:        c9                           leave  
  14. 80483ad:        c3                           ret   

  15. 080483ae <func1>:
  16. 80483ae:        55                           push   %ebp
  17. 80483af:        89 e5                        mov    %esp,%ebp
  18. 80483b1:        5d                           pop    %ebp
  19. 80483b2:        c3                           ret   
  20. 80483b3:        90                           nop
  21. 80483b4:        90                           nop
  22. 80483b5:        90                           nop
  23. 80483b6:        90                           nop
  24. 80483b7:        90                           nop
  25. 80483b8:        90                           nop
  26. 80483b9:        90                           nop
  27. 80483ba:        90                           nop
  28. 80483bb:        90                           nop
  29. 80483bc:        90                           nop
  30. 80483bd:        90                           nop
  31. 80483be:        90                           nop
  32. 80483bf:        90                           nop
复制代码

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
22 [报告]
发表于 2013-09-30 10:59 |只看该作者
回复 18# myworkstation
我认为gcc的栈对齐还是可靠的。
印象中在哪看过这种说法,现在找不到在哪:gcc在编译一个函数的时候,如果它能够看见这个函数所依赖的所有函数的实现,那么它就产生更加高效的汇编代码;
否则的话,它就产生更加保守的代码。在我的三个版本的编译器下测试了下,发现是符合这个的。


   

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
23 [报告]
发表于 2013-09-30 11:28 |只看该作者
回复 22# 井蛙夏虫


    你可以把这个问题深入研究一下,然后整理个专题出来。我帮你加精,置顶。

论坛徽章:
26
CU大牛徽章
日期:2013-03-13 15:15:08水瓶座
日期:2014-08-31 19:44:01卯兔
日期:2014-09-05 08:48:33摩羯座
日期:2014-09-07 13:03:35子鼠
日期:2014-09-10 08:42:36白羊座
日期:2014-09-20 12:39:07丑牛
日期:2014-09-24 07:35:252015年亚洲杯之阿联酋
日期:2015-02-03 17:42:542015年亚洲杯之卡塔尔
日期:2015-02-11 13:13:022015年亚洲杯之约旦
日期:2015-03-03 15:10:522015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之卡塔尔
日期:2015-03-27 14:08:09
24 [报告]
发表于 2013-10-04 19:41 |只看该作者

论坛徽章:
26
CU大牛徽章
日期:2013-03-13 15:15:08水瓶座
日期:2014-08-31 19:44:01卯兔
日期:2014-09-05 08:48:33摩羯座
日期:2014-09-07 13:03:35子鼠
日期:2014-09-10 08:42:36白羊座
日期:2014-09-20 12:39:07丑牛
日期:2014-09-24 07:35:252015年亚洲杯之阿联酋
日期:2015-02-03 17:42:542015年亚洲杯之卡塔尔
日期:2015-02-11 13:13:022015年亚洲杯之约旦
日期:2015-03-03 15:10:522015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之卡塔尔
日期:2015-03-27 14:08:09
25 [报告]
发表于 2013-10-04 19:43 |只看该作者

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
26 [报告]
发表于 2013-10-04 21:26 |只看该作者
回复 23# myworkstation
我自己也是一知半解

   

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
27 [报告]
发表于 2013-10-04 23:36 |只看该作者
回复 25# Third-Edition
《深入理解计算机系统》第3章的内容,小弟自己也正在看这本书,不过这里只是说了结果,而没有过程,感觉还是有点玄,似乎并不能自圆其说
难不成只能把16字节对齐作为一个公理,而不是有推导过程或者依据的定理了么?
这里有一个08年的帖子,大概看了看,最起码可以解释分配的栈帧字节数是怎样得出的:
http://bbs.csdn.net/topics/100119366

呵呵,谢谢。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP