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