cdecl
stdcall
__fastcall
- 함수에 인자를 전달할때는 stack에 저장되어 전달된다.
- 인자정리방법은 caller 방식을 따른다.
caller는 함수가 호출되고 기능을 한 후 되돌아가서 인자공간이 정리되는 방식입니다.
- 주로 c 또는 c++ 에서 기본으로 사용하는 함수호출규약.
stdcall
- 인자전달방법으로 stack을 통한다.
- 인자정리방법이 callee방식을 따른다.
이부분이 cdecl과 다릅니다. callee는 호출된 함수내에서 인자를 해제한 후 돌아가는 방식입니다.
이 방식은 인자공간이 해제되는 공간이 정해져 있어서 가변인자함수를 사용하기 어렵다.
- 윈도우 API (WinAPI)에서 사용되는 함수호출규약
__fastcall
- 인자전달방법으로 stack 과 register를 사용한다.
레지스터는 메모리보다 동작 방식이 빠르기 때문에 다른 함수호출규약에 비해 실행속도가 빠르다.
그러나 c언어에서는 그대로 사용하면 형태만 따르기 때문에 코드가 늘어나서 오히려 느려질 수도 있다.
그렇기 때문에 c언어에서는 특별한 방식을 사용해야한다.
레지스터는 ECX와 EDX를 사용하는데 첫번째 인자를 ECX에 두번째 인자를 EDX에 세번째인자부터는 stack에 저장한다.
- 인자정리방법으로 callee 방식을 따른다.
- 주로 델파이언어라는 곳에서 기본적인 함수호출규약으로 사용한다.
댓글