簡體   English   中英

為什么有數組的調用約定?

[英]Why is there a calling convention for arrays?

我正在閱讀System V應用程序二進制接口 ,有一部分是我無法理解的。

首先,該文件指出

沒有嘗試為C以外的語言指定ABI

(第10頁)。

稍后,在第20頁,數組分為MEMORY,POINTER等:

聚合(結構和數組)和聯合類型的分類如下:
...

然后使用分類來定義調用約定 - 它們的值和邊界如何傳遞給函數並從函數返回。 如果我正確讀取算法,則可以將數組分類為INTEGER,MEMORY或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   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM