Convenció de crida

En informàtica, una convenció de crida és un esquema de nivell d'implementació (nivell baix) sobre com les subrutines o funcions reben paràmetres de la persona que truca i com retornen un resultat. Quan algun codi crida a una funció, s'han pres opcions de disseny per on i com es passen els paràmetres a aquesta funció, i on i com es retornen els resultats d'aquesta funció, amb aquestes transferències normalment fetes a través de determinats registres o dins d'un marc de pila a la crida. pila. Hi ha opcions de disseny sobre com es divideixen les tasques de preparació per a una crida de funció i restauració de l'entorn un cop finalitzada la funció entre qui truca i el destinatari. Algunes convencions de crida especifica la manera com s'ha de cridar cada funció. S'ha d'utilitzar la convenció de crida correcta per a cada crida de funció, per permetre l'execució correcta i fiable de tot el programa utilitzant aquestes funcions.[1][2]

Introducció

[modifica]

Les convencions de crida solen considerar-se part de la interfície binària de l'aplicació (ABI).[3]

Conceptes relacionats

[modifica]

Els noms o significats dels paràmetres i els valors de retorn es defineixen a la interfície de programació d'aplicacions (API, a diferència de l'ABI), que és un concepte separat encara que relacionat amb l'ABI i la convenció de crida. Els noms dels membres dins d'estructures i objectes passats també es considerarien part de l'API, i no de l'ABI. De vegades, les API inclouen paraules clau per especificar la convenció de crida per a funcions.[4]

Diferents convencions de crida

[modifica]

Les convencions de crida poden diferir en: [5]

  • On es col·loquen els paràmetres. Les opcions inclouen registres, a la pila de crides, una barreja de tots dos o en altres estructures de memòria.
  • L'ordre en què es passen els paràmetres. Les opcions inclouen l'ordre d'esquerra a dreta, de dreta a esquerra o alguna cosa més complexa.
  • Com es gestionen les funcions que prenen un nombre variable d'arguments (funcions variàdiques). Les opcions inclouen només passar en ordre (suposant que el primer paràmetre està en una posició òbvia) o les parts variables d'una matriu.
  • Com s'entreguen els valors de retorn des del destinatari de la crida a la persona que truca. Les opcions inclouen a la pila, en un registre o referència a alguna cosa assignada a la pila.
  • Quant de temps o complexos es gestionen, potser dividint-se en diversos registres, dins del marc de pila o amb referència a la memòria.
  • Es garanteix quins registres tindran el mateix valor quan torna el destinatari que ho feien quan es va cridar al destinatari. Es diu que aquests registres es guarden o es conserven, de manera que no són volàtils .
  • Com es divideix la tasca de configurar i netejar després d'una crida de funció entre la persona que truca i la persona que truca. En particular, com es restaura el marc de pila perquè la persona que truca pugui continuar després que el destinatari hagi acabat.
  • Si i com es transmeten les metadades que descriuen els arguments.
  • On s'emmagatzema el valor anterior del punter de marc, que s'utilitza per restaurar el marc de pila quan acaba la subrutina. Les opcions inclouen dins de la pila de crides o en un registre específic
  • On es col·loquen qualsevol enllaç d'àmbit estàtic per a l'accés a dades no locals de la rutina (normalment en una o més posicions del marc de pila, però de vegades en un registre general o, per a algunes arquitectures, en registres especials).
  • Per als llenguatges orientats a objectes, com es fa referència a l'objecte de la funció.

Referències

[modifica]
  1. TylerMSFT. «Calling Conventions» (en anglès americà), 03-08-2021. [Consulta: 10 setembre 2023].
  2. «C/C++ Calling Conventions» (en anglès). [Consulta: 10 setembre 2023].
  3. «Assembly 2: Calling convention – CS 61 2018» (en anglès). [Consulta: 10 setembre 2023].
  4. «What are the different calling conventions in C/C++ and what do each mean?» (en anglès). [Consulta: 10 setembre 2023].
  5. «Appendix: Calling Convention | CS 61C Summer 2023» (en anglès). [Consulta: 10 setembre 2023].