// 함수가 사용하는 메모리 : 스택(Stack)
// 함수와 관련된 내용(스택 프레임)
// 1. 얼마나 메모리를 사용할 것인지 => 임시 데이터
// 2. 매개변수(인자)
// 3. 반환 주소
// 스택 관리는 bp, sp를 이용함.
// bp : 함수가 사용하는 메모리의 시작 주소
// sp : 함수가 사용할 수 있는 메모리의 끝 주소
// 호출 규약(Calling Convention)
// => 인자를 어떻게 전달할 것이며, 반환 값을 어떻게 돌려줄 것인가
// x86
// cdecl : 기본 호출 규약. 인자는 오른쪽부터 왼쪽 순서대로 스택에 넣고, 스택 정리는 호출자가 한다. 가변 인자 사용 가능
// stdcall : 인자를 오른쪽부터 왼쪽 순서대로 스택에 넣고, 스택 정리는 피호출자가 한다. 가변 인자 사용 불가능
// __fastcall : (가능하다면) 첫 번째 인자와 두 번째 인자를 레지스터에 저장하고, 나머지 인자는 오른쪽에서 왼쪽 순서대로 스택에 넣음. 그리고 스택 정리는 피호출자가 한다.
// x64
// 4번째 인자까지 레지스터에 넣고, 스택 정리는 피호출자가 한다.
- 조건부 컴파일 / 매크로 대체 / 다른 파일 포함 등