免费注册 查看新帖 |

Chinaunix

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

[C] Linux下c函数参数的入栈顺序? [复制链接]

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
61 [报告]
发表于 2013-01-29 10:55 |只看该作者
zylthinking 发表于 2013-01-29 10:53
就算是忽略, 也可以认为编译器作者将 cdecl 实现为和 eabi 相同的语意, 你少废话, 要么拿出证据说明 ...


哈哈,这下我真没话可说了,原来忽略就可以认为实现为和eabi相同的语义。我不说废话了,我闭嘴,你继续。

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
62 [报告]
发表于 2013-01-29 10:58 |只看该作者
回复 59# superwujc


    首先,我没有说你弱智,我是说将这个问题说成是内存对齐问题弱智
    其次,我说的是内存对齐问题弱智,并没有攻击说将这个问题归结为内存对齐的人弱智
    最后,我说这个问题本身是一个复杂的问题,我还专门写程序验证了的,事实上我的验证结果是----
            对于寄存器传参,编译器似乎可以任意优化,当然这个验证结果也让我大惊失色,不过我不打算穷追这个问题了。
            这个问题本身就很复杂,与他相比,内存对齐问题是小儿科。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
63 [报告]
发表于 2013-01-29 10:59 |只看该作者
本帖最后由 zylthinking 于 2013-01-29 11:05 编辑
zhaohongjian000 发表于 2013-01-29 10:55
哈哈,这下我真没话可说了,原来忽略就可以认为实现为和eabi相同的语义。我不说废话了,我闭嘴,你继续 ...


怎么了, 有意见? 你闭嘴吧, 要么就我的证明错误; 而不是要么笑而不语, 要么 “原来忽略就可以认为实现为和eabi相同的语义”, 你倒是证明它不能这样实现啊?
linux shmattach 和 mmap 共用相同逻辑,也可以认为在共用逻辑的开始点, linux 忽略了其中一个; 你倒是对他们 笑而不语 啊

论坛徽章:
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
64 [报告]
发表于 2013-01-29 11:08 |只看该作者
回复 62# liuiang
弱智什么的都不要紧,无所谓,但既然我在这发帖子提问题了,总应该有个结果吧,传参入栈的顺序这个既然有那么多不确定因素,到现在还争执不下

那对于简单的问题,各位高人给小弟一个明确的指点好吗,这个应该不会太浪费时间吧

现在的情况是,我提出了一个自己不能解决的问题,上来请教各位,但是最后却发现我从一个参与者变成了一个旁观者,并没有得到我想要的答案

各位大牛引申出的各种理论规范ABI编译器寄存器什么的,已经远远超出小弟力所能及,只能在一旁干看着。。。



   

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
65 [报告]
发表于 2013-01-29 11:19 |只看该作者
superwujc 发表于 2013-01-29 11:08
回复 62# liuiang
弱智什么的都不要紧,无所谓,但既然我在这发帖子提问题了,总应该有个结果吧,传参入栈 ...


你的问题早解决了, 还有什么问题

论坛徽章:
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
66 [报告]
发表于 2013-01-29 11:29 |只看该作者
回复 65# zylthinking

还没有。。。
我只是发帖问过,还没得到各位的明确指教

c为char*,b为long,a为int,从c到a地址递增
c的地址到b的地址之间是8byte,这里没问题,b的地址到a的地址之间是12byte,这里有疑问,只想知道出现这种结果的原因

2楼的回复是“he 3rd argument is a pointer, not a pointer points to a pointer.”

44楼用例子做了回复,我没看懂,接着问

我尽全力在2楼和44楼的答复和我的疑问之间寻找关联,换言之,一直在猜,没有得到确定的回答

不是弱智什么的,我只是想知道用什么道理可以解释出现这种结果的原因,也就是针对这个问题应该从哪方面去考虑

总不能像刘谦一样,变了半天魔术,只把想象的空间留给观众吧?何况我是发问的~~
   

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
67 [报告]
发表于 2013-01-29 11:38 |只看该作者
superwujc 发表于 2013-01-29 11:29
回复 65# zylthinking

还没有。。。


编译器不保证所有参数互相挨着, 所以这根本不是问题, 至于原因, 很可能是对齐之类的东西, 但未必一定就是这个原因; 但本身参数互相挨着这个假设就是不靠谱的, 所以其实你找答案本身就没什么意义; 与其这样, 不如去搜索一下对齐相关的内容

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
68 [报告]
发表于 2013-01-29 11:46 |只看该作者
回复 64# superwujc


    不好意思,之前的关于字节对齐问题的表态是不对的,刚才一直以为楼主只问了入栈顺序,重新看了1楼,发现确实存在字节对齐的问题,这里收回关于字节对齐问题的表态,对应楼层已经编辑。抱歉。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
69 [报告]
发表于 2013-01-29 12:03 |只看该作者
superwujc 发表于 2013-01-29 10:41
回复 49# 一介村夫
抱歉,可能是我思维中有盲点,或者岔路

我写的还不够清楚?
E508~E50F这8个字节是a,但是因为a是int,只占4字节,所以E508~E50B这4个字节空着,a实际存放在E50C~E50F中,首地址是E50C。
OK?

论坛徽章:
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
70 [报告]
发表于 2013-01-29 12:10 |只看该作者
回复 69# 一介村夫

终于理解了楼上的意思
为什么E508~E50B=无用,E50C~E50F=a而不是E508~E50B=a,E50C~E50F=无用?

“64位机,字长64”和“简单类型的变量在栈中的长度都是8字节”两者之间是因果关系吗?

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP