x86_64 架构, 不考虑浮点的话:
在 windows 平台, 编译器 msvc, 参数依次存放于 rcx, rdx, r8, r9, [rsp + 28h]...
在 android 平台, 编译器 gcc/clang, 参数依次存放于 rdi, rsi, rdx, rcx, r8, r9...
想问的是, 这种差异是什么决定的?
1
hjc4869 2017-11-19 23:19:41 +08:00
平台可以自己定义自己的 ABI
|
2
limhiaoing 2017-11-19 23:25:41 +08:00 via iPhone
编译器决定的,windows x64 上 vc 统一成__fastcall 了,不像 x86 那么乱了。
|
3
SlipStupig 2017-11-19 23:26:17 +08:00
@limhiaoing vc 默认不是 stdcall?
|
4
limhiaoing 2017-11-19 23:32:26 +08:00 via iPhone
@SlipStupig
VC x86 才能使用 stdcall,x64 无论是否显式指定哪一种,最终实际编译生成的都是 fastcall。 |
5
gnaggnoyil 2017-11-20 01:41:37 +08:00
@limhiaoing calling convention 编译器自己决定不了的.GCC 在 windows 下用的也是 MSVC amd64 的那一套 calling convention
|
6
RLib OP |