스코프의 종류
1. 블럭 스코프(Block Scope)
2. 파일 스코프(File Scope)
3. 함수 스코프(Function Scope): goto-label문과 관련 있음.
4. 함수 선언 스코프(Function Declaration Scope): 매개변수 목록과 관련 있음.
블럭 스코프(Block Scope) vs. 파일 스코프(File Scope)
조건문, 반복문, 함수 같은 문(statement)에 사용되는 중괄호 범위를 블럭 스코프라고 하고 지역변수가 저장된다
어떤 블럭 스코프에도 속하지 않는 파일 내 범위를 파일 스코프라고 하고 전역변수가 저장된다
여기서 파일이란 Translation Unit 범위로 볼 수 있으며
Translation Unit 범위는 전처리 과정에서 일어나는 #include (헤더파일)와 #define (매크로 변수, 매크로 함수)이
포함된 .c 파일을 의미한다
스택 메모리(Stack Memory)
컴퓨터의 메모리 구조는
크게 스택 메모리, 힙 메모리, 코드 섹션, 데이터 섹션으로 구분된다
그중에서 스택 메모리는 지역변수가 저장되고 함수들이 호출되는 공간이다
스택 메모리는 스택 포인터와 베이스 포인터, 스택 프레임들로 구성되어 있다
스택 메모리의 크기는 컴파일 단계에서 결정되고, 스택 메모리의 위치는 프로그램 실행 시에 결정됨. 실행할 때마다 스택 메모리의 위치는 달라지게 됨. 즉, 위치는 중요하지 않음. 어느 컴퓨터건 간에 실행 가능하다는 의미.
스택 프레임(Stack Frame)
함수가 호출되면 해당 함수가 사용할 메모리 크기만큼 공간이 확보된다
해당 함수를 위해 확보된 메모리 공간을 스택프레임이라고 부른다
함수가 모두 수행된 뒤에 스택프레임은 다시 반환된다
스택 포인터(Extended Stack Pointer, ESP)
현재 스택 프레임의 어느 지점을 수행하고 있는지를 가르킨다
베이스 포인터(Extended Base Pointer, EBP)
현재 스택 프레임의 시작 주소를 가르킨다
함수 호출 규약(Calling Convention)
함수가 호출 될 때,
매개변수를 어떻게 전달할 거고 어떤 순서로 전달할지 등에 대한 규약이다
또한 어떤 레지스터를 어떻게 쓸지도 작성되어 있다 ex) eax에 리턴값 저장, …
Windows API는 stdcall이라는 함수 호출 규약을 사용한다
이런 규약들에서는 또 다른 함수를 호출하는 함수를 Caller, 호출을 당하는 함수를 Callee라고 부른다
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] 재귀 함수 (Resurcive Function) (0) | 2024.02.07 |
---|---|
[C] 변수의 종류 (0) | 2024.02.07 |
[C] 2차원 배열 (0) | 2024.02.05 |
[C] 반복문 (0) | 2024.02.04 |
[C] 조건문과 Intentional-Fallthrough (0) | 2024.02.03 |