C 언어
Cpp 언어
Kotlin
Android App
알고리즘
Git/CI/CD
함수 호출 규약 (C++포함)
cdecl 호출 규약
- C, C++에서 사용하는 표준 규약.
- 장점 : 가변인자 사용 가능함. 앞의 인자부터 pop하게 되며 스택의 크기를 알고 있는 Caller가 스택 정리하므로 가능하다.
- 단점 : 컴파일 시 스택 정리를 위한 코드가 추가되는 오버헤드 발생
- 방식 :
    1. 함수의 인자는 뒤에서 앞으로 스택에 쌓인다.
    2. 함수의 인자의 해석은 앞에서부터 뒤쪽으로 해석된다.
    3. 함수가 종료될 때 스택 정리는 Caller가 처리한다.
그림 예)



stdcall 호출 규약
- WinAPI, Visual Basic에서 사용하는 방식
- 장점 : Pascal과 cdecl의 혼합 방식(스택 정리를 위한 코드가 없음)
- 단점 : 가변인자 사용 불가능(함수 종료 때 스택 정리를 Callee가 하므로 스택의 크기를 정확히 알 수 없음)
- 방식 :
    1. 함수의 인자는 뒤에서 앞으로 스택에 쌓인다.
    2. 함수의 인자의 해석은 앞에서부터 뒤쪽으로 해석된다.
    3. 함수가 종료될 때 스택 정리는 Callee가 처리한다.
그림 예)




기타 호출 규약
pascal 호출 규약 : 함수 인자를 앞에서 뒤로 스택에 쌓는 방식
fastcall 호출 규약 : 함수 인자를 뒤에서 앞으로 저장하되, 최초 두 인자는 레지스터에 담는 방식