![]() |
1
11
您询问的是“应用程序二进制接口”(ABI)和调用约定。这些通常由操作系统和库设置,并由编译器和链接器强制执行。谷歌的“ABI”或“呼叫约定”。一些起点来自 Wikipedia Debian for ARM . |
![]() |
2
4
Agner Fog的“调用约定”文档总结了Windows和Linux 64位和32位ABI: http://www.agner.org/optimize/calling_conventions.pdf . 寄存器使用汇总见第10页表4。 个人经验中的一个警告是:不要在内联程序集中嵌入关于ABI的假设。如果您在内联汇编中编写一个函数,该函数假定在特定寄存器(例如eax、rdi、rsi)中进行返回和/或参数传输,则当编译器内联该函数时,该函数将中断。 |
![]() |
3
1
|
![]() |
4
0
好吧,今天如果打开优化,就没有了。但GCC允许您声明您的汇编指令应该使用特定的变量,而不管它是否在寄存器中,或者甚至强制GCC将该变量放入可与您的指令一起使用的寄存器中。您还可以声明为自己注册内联程序块保留的寄存器(所以编译器应该在内联块周围生成适当的保存/恢复代码,如果需要的话) |
![]() |
5
0
Itanium ABI 就其大部分功能而言;它和它使用的ABI之间的不兼容是 documented . |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |