본문 바로가기
이론/운영체제

함수호출규약

by 사과잼빵 2015. 9. 8.

일단 32비트 기반 함수 호출규약과 64비트 기반 함수 호출 규악은 다르기 때문에 32비트 기반 함수 호출규악에 대해 먼저 알아보겠다.


- 32 bit

1. _cdecl

C/C++의 32비트 기반 디폴트 함수 호출규약은 _cdecl이다.  반환 시에는 함수를 호출한 Caller가 주체가 되어 스택 프레임을 반환하도록 정의되어있다.

 2. _stdcall

스택 프레임을 반환하는 주체가 호출된 함수이다.

3. _fastcall

함수 호출을 빠르게 처리하기위한 호출규약이다. 따라서 인자를 저장할 때 (ecx, edx)레지스터를 사용한다. 


- 64 bit

운영체제에 따라서 호출 규약이 나뉘게 된다.

Windows 기반에서는 총 8개의 레지스터를 활용해서 전달되는 인자를 저장하지만 실제로는 4개의 인자만 저장된다.

Linux나 BSD 계열의 시스템에서는 훨씬 많은 수의 레지스터를 전달되는 인자에 할당하고 있다.(최대 14개)


- 그리고 모든 호출규약들에서 인자들이 스택에 쌓이는 순서는 오른쪽에 전달되는 인자가 먼저 스택에 쌓인다.


'이론 > 운영체제' 카테고리의 다른 글

우선순위 스케줄링  (0) 2015.10.06
라운드 로빈(Round Robin) 스케줄링  (0) 2015.10.06
FCFS 스케줄링  (0) 2015.10.06
스레싱(Thrashing)이란  (0) 2015.10.01