我在读这篇文章,有一部分我无法理解。
首先,文件指出
没有尝试为C以外的语言指定ABI
(第10页)。
稍后,在第20页,数组被分类为内存、指针等:
集料(结构和阵列)和联合类型工程的分类
如下:
…
然后,该分类用于定义调用约定—如何将它们的值和边界传递给函数并从函数返回。如果我正确地读取算法,数组可以被分类为整数、内存或SSE。
但在C语言中,数组总是作为指针传递和返回。那么,为什么对数组进行分类是有用的呢?在什么情况下数组类才是重要的?
最佳答案
我想起来了:如果数组是结构或联合的一部分,它可以在寄存器中传递。
这个C代码
#include <stdint.h>
struct somebytes {
uint8_t bytes[8];
};
uint8_t plus(struct somebytes p) {
return p.bytes[3]+p.bytes[5];
}
转换为此程序集:
mov %rdi,%rax
shr $0x28,%rdi
shr $0x18,%rax
add %edi,%eax
retq