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