Votre ABI est probablement incorrect

L'ABI, ou Application Binary Interface, définit comment les binaires interagissent les uns avec les autres sur une plate-forme particulière et inclut une convention d'appel. La plupart des ABI ont un défaut de conception qui ralentit les performances.





Commençons par examiner l'ABI System V pour la gamme de processeurs x86. L'ABI classe les arguments de fonction dans un certain nombre de catégories différentes ; nous n'en considérerons que deux :





INTEGER: , .





MEMORY: , .





; , :





  1. , INTEGER .





  2. , MEMORY .





  3. , , , .





, , .





? , , , . , ; , , .





:





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!






:





  • SysV ABI





  • Microsoft ABI





  • ARM ABI





  • RISC-V ABI





  • PowerPC ABI





  • MIPS n32 ABI





  • C11






"C++ Developer. Professional". , , , .





- DEMO DAY








All Articles