我在读这篇文章,有一部分我无法理解。
首先,文件指出
没有尝试为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

09-09 20:35
查看更多