Technique

함수 호출 규약

Rasser 2022. 1. 16. 16:14

요약

- cdecl

- fastcall

- stdcall

 

정의

"함수를 호출할 때 파라미터(인자)를 어떤 식으로 전달하는지에 대해 정해놓은 일종의 약속

 

용어 : caller -> 함수를 호출한 쪽, callee -> 함수 호출을 당한 쪽

 

cdecl

- 주로 C언어에서 사용되는 방식

- caller에서 스택을 정리한다. 예를들어 main이 A라는 함수를 호출했다면 main이 자신이 스택에 입력한 함수 파라미터를 직접 정리

- 장점 : 가변 길이 파라미터를 전달할 수 있다.

 

stdcall

- Win32 API에서 사용되는 방식

- callee가 스택을 정리함

- stdcall으로 컴파일 하고 싶을때는 _stdcall 키워드를 붙여주면됨. 

- 장점 : 코드의 크기가 작아진다.

 

fastcall

- 기본적으로 stdcall 방식과 같지만 함수에 전달되는 파라미터의 일부를 스택이 아닌 레지스터를 이용하여 전달

- 장점 : 좀 더 빠른 함수 호출이 가능