Understanding Calling Conventions in C/C
Calling conventions define how functions pass and receive arguments and their values. C/C offers various calling conventions, each serving a specific purpose.
Number of Calling Conventions
There are several calling conventions available in C/C , including:
- cdecl
- syscall
- pascal
- stdcall
- fastcall
- vectorcall
- safecall
- Microsoft X64 Calling Convention
Meaning of Each Convention
cdecl:
- Arguments passed on the stack.
- Registers are designated for specific purposes (EAX for return value, EAX, ECX, EDX for caller-saved).
syscall:
- Similar to cdecl but does not preserve specific registers.
pascal:
- Parameters passed on the stack in left-to-right order.
- Callee responsible for stack cleanup.
stdcall:
- Callee cleans up the stack.
- Parameters pushed in right-to-left order, like cdecl.
- Registers designated for internal function use (EAX, ECX, EDX).
fastcall:
- First two arguments passed in registers (ECX and EDX).
- Remaining arguments pushed on the stack right-to-left.
vectorcall:
- Supports passing vector arguments using SIMD registers.
- Up to six registers allocated for vector arguments.
safecall (Delphi/Free Pascal):
- Encapsulates COM error handling.
- Exceptions returned in EAX as an HRESULT, while the result is passed by reference.
Microsoft X64 Calling Convention:
- Used in Windows and pre-boot UEFI.
- First four integer/pointer arguments passed in registers (RCX, RDX, R8, R9).
The above is the detailed content of How Do Calling Conventions Shape Function Argument Passing in C/C ?. For more information, please follow other related articles on the PHP Chinese website!