A ABI, ou Interface Binária do Aplicativo, define como os binários interagem entre si em uma plataforma específica e inclui uma convenção de chamada. A maioria dos ABIs tem uma falha de projeto que retarda o desempenho.
Vamos começar examinando a ABI do System V para a linha de processadores x86. A ABI classifica os argumentos da função em várias categorias diferentes; consideraremos apenas dois:
INTEGER: , .
MEMORY: , .
; , :
, INTEGER .
, MEMORY .
, , , .
, , .
? , , , . , ; , , .
:
void foo(int*);
void bar(void);
int x = 5;
foo(&x); // , foo &x
x = 7;
bar(); // , bar x
return x; // , ;
// ( , x , , , .)
restrict
! foo
restrict
, foo (C11§6.7.3.1p4,11). , . , restrict
C , , , ABI C .
, ABI . void foo
(struct bla
) , void foo
(const struct bla *restrict
), , .
, System V. ABI? Microsoft , :
[ ] , .
( , , ), . «, », , , - .
ABI! ARM (, AAA arch 64):
, 16 , , , .
RISC-V:
2×XLEN [: ?] .
[...]
, , .
PowerPC:
[] (GPR), , .
MIPS n32:
(structs), (unions), (doublewords), , , , , .
.
ABI immutable , . , , , , . , .
, ABI!
:
"C++ Developer. Professional". , , , .