0506

민우이·2022년 5월 6일

// 함수가 사용하는 메모리 : 스택(Stack)
// 함수와 관련된 내용(스택 프레임)
// 1. 얼마나 메모리를 사용할 것인지 => 임시 데이터
// 2. 매개변수(인자)
// 3. 반환 주소
// 스택 관리는 bp, sp를 이용함.
// bp : 함수가 사용하는 메모리의 시작 주소
// sp : 함수가 사용할 수 있는 메모리의 끝 주소

// 호출 규약(Calling Convention)
// => 인자를 어떻게 전달할 것이며, 반환 값을 어떻게 돌려줄 것인가
// x86
// cdecl : 기본 호출 규약. 인자는 오른쪽부터 왼쪽 순서대로 스택에 넣고, 스택 정리는 호출자가 한다. 가변 인자 사용 가능
//
stdcall : 인자를 오른쪽부터 왼쪽 순서대로 스택에 넣고, 스택 정리는 피호출자가 한다. 가변 인자 사용 불가능
// __fastcall : (가능하다면) 첫 번째 인자와 두 번째 인자를 레지스터에 저장하고, 나머지 인자는 오른쪽에서 왼쪽 순서대로 스택에 넣음. 그리고 스택 정리는 피호출자가 한다.

// x64
// 4번째 인자까지 레지스터에 넣고, 스택 정리는 피호출자가 한다.

빌드 : 프로그램을 만드는 과정

  1. 전처리 : 컴파일 전에 하는 처리
    • 조건부 컴파일 / 매크로 대체 / 다른 파일 포함 등
  2. 컴파일 : 사람의 언어로 작성된 소스 코드를 컴퓨터가 알 수 있는 언어로 번역
  3. 링크 : 식별자가 의미하는 메모리 주소를 연결

0개의 댓글