x86_64 传参规则有没有统一的规范?

2017-11-19 23:12:58 +08:00
 RLib

x86_64 架构, 不考虑浮点的话:
在 windows 平台, 编译器 msvc, 参数依次存放于 rcx, rdx, r8, r9, [rsp + 28h]...
在 android 平台, 编译器 gcc/clang, 参数依次存放于 rdi, rsi, rdx, rcx, r8, r9...

想问的是, 这种差异是什么决定的?

3080 次点击
所在节点    程序员
6 条回复
hjc4869
2017-11-19 23:19:41 +08:00
平台可以自己定义自己的 ABI
limhiaoing
2017-11-19 23:25:41 +08:00
编译器决定的,windows x64 上 vc 统一成__fastcall 了,不像 x86 那么乱了。
SlipStupig
2017-11-19 23:26:17 +08:00
@limhiaoing vc 默认不是 stdcall?
limhiaoing
2017-11-19 23:32:26 +08:00
@SlipStupig
VC x86 才能使用 stdcall,x64 无论是否显式指定哪一种,最终实际编译生成的都是 fastcall。
gnaggnoyil
2017-11-20 01:41:37 +08:00
@limhiaoing calling convention 编译器自己决定不了的.GCC 在 windows 下用的也是 MSVC amd64 的那一套 calling convention
RLib
2017-11-24 20:53:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/407753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX