일단 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 |