c - C 调用约定/参数传递
问题描述
我看过的所有地方(“从头开始编程”,Wikipedia x86 Calling Convention,...),都说 C 通过堆栈传递参数。然而,在下面的 C 代码中
int func(int);
int main() {
func(5);
return 0;
}
int func(int a) {
return a;
}
参数 a 通过寄存器 %edi 传递(用于gcc -S ex.c
在 Ubuntu 64 位机器上编译)。我传递了更多参数,调用者只是使用更多寄存器来传递值。
这正常吗?我访问的在线资源是否已经过时?
提前致谢。
解决方案
推荐阅读
- excel - 如何在切片器中仅取消选择一个特定项目
- perl - Perl 在字符串中附加一个子字符串
- javascript - 使用flask-bootstrap时将SelectField值从javascript传递到flask
- r - 从字符串中提取函数或对象,然后使用 Magrittr/Dplyr 对它们进行管道传输
- java - 如何在绑定中转换时区?
- excel - Excel 坚持认为我的 OpenXml 文件有错误
- c++ - 为什么 using namespace & using namespace::var 声明不会导致歧义
- azure-logic-apps - 逻辑应用从其他变量初始化数组
- java - 当我尝试将数字减去百分比时,为什么我的程序会输出错误的计算结果?
- amazon-cloudformation - 由于来自 Cloudwatch 的表达式字符串,无法更新 AWS CloudFormation