【发布时间】:2023-03-29 23:39:01
【问题描述】:
我正在阅读System V Application Binary Interface,其中有一部分我无法理解。
首先,文件指出
没有尝试为 C 以外的语言指定 ABI
(第 10 页)。
稍后,在第 20 页,数组被分类为 MEMORY、POINTER 等:
聚合(结构和数组)和联合类型的分类有效 如下:
...
然后使用分类来定义调用约定——它们的值和边界如何传递给函数并从函数返回。如果我正确阅读了算法,则数组可以归类为 INTEGER、MEMORY 或 SSE。
但是在 C 语言中,数组总是作为指针传递和返回。那么为什么对数组进行分类很有用,在什么情况下数组类很重要呢?
【问题讨论】:
-
第一个引号本身很容易理解,因为 C 是 Unix 世界的 lingua franca。至于第二个引用,C 将数组作为指针传递(或评估者让数组衰减到指向其第一个元素的指针)是因为这就是 C 从一开始就是这样工作的,这就是 C 规范所说的应该发生的事情。
标签: c arrays x86-64 calling-convention