함수 주요 형태(_stdcall, _cdecl, _fastcall)

프로그래밍/C/C++ 2014. 2. 24. 04:51

1. _cdecl

C 또는 C++ 프로그램에서 파라미터 전달시 디폴트로 사용

파라미터 전달은 오른쪽에서 왼쪽 방향으로 스택에 저장

파라미터 해제는 프로시저를 호출한 것이 책임짐(스택정리)

 

 

2. _stdcall

Windows API 프로시저에서 사용

파라미터 전달은 _cdecl과 동일

파라미터 해제는 프로시저 복귀 전에 이루어짐

장점

- 함수 독립성이 뛰어남

- 프로시저를 부르기 전에 스택에 파라미터를 쌓아놓고 그 프로시저를 부르기만 하면 그 함수가 리턴된 후에는 그 프로시저의 스택 포인터가

이전 상태로 복원되었으므로 복귀된 후에 호출한 프로시저에 대하여 신경쓸 필요가 없음.

- _cdecl 방식의 콜링컨벤션에 비해 코드 크기가 줄어든다.

- 스택을 해제하는 코드가 호출한 프로시저 안에 있으므로 이 프로시저가 여러 곳에서 호출된다 할지라도 스택 해제하는 코드는

프로시저 내에 하나만 존재함

 

 

3. _fastcall

처음 두 개까지의 파라미터는 스택을 사용하지 않고, ecxedx 레지스터를 사용함

그 이상의 파라미터에 대해서만 오른쪽에서 왼쪽으로 스택에 저장

스택 제거는 _stdcall과 동일

 

'프로그래밍 > C/C++' 카테고리의 다른 글

메모리 관리 함수(memset, memcpy, memmove)  (0) 2014.10.24
C++ 파일 입출력  (0) 2014.02.24
비트 연산자  (0) 2014.02.12
함수 포인터  (0) 2014.02.12
[STL]컨테이너 선택  (0) 2014.02.09