심볼(Symbol)과 심볼 테이블(Symbol Table)
외부 라이브러리나 다른 파일에 있는 함수, 전역 변수의 위치를 찾기 위해 사용됨
컴파일 과정에서 생성되며, 이후 링크 단계에서 링커가 이를 참조하여 실제 메모리 주소를 연결함
심볼 (Symbol)
- 함수나 전역 변수를 식별하기 위한 정보
- 객체 자체가 아니라 객체를 가리키는 이름표
예시
void Attack()
{
}
int HP = 100;
생성되는 심볼 예시:
Attack
HP
심볼이 포함하는 정보
- 함수/변수 이름
- 섹션 정보
- 오프셋(상대 위치)
- 참조 정보
심볼 테이블 (Symbol Table)
- 심볼들을 저장하는 테이블
특징
- 오브젝트 파일 하나당 하나씩 존재
- 컴파일/어셈블 단계에서 생성
- 오브젝트 파일 내부 메타데이터로 저장됨
왜 필요한가?
다른 파일의 함수나 변수를 사용하려면 위치를 알아야 하기 때문
예시:
// A.cpp
void Attack()
{
}
// B.cpp
extern void Attack();
Attack();
B.cpp는 Attack()의 실제 위치를 모르기 때문에:
Attack 심볼
을 참조하여 링크 단계에서 연결함
링크 단계에서의 역할
- 각 오브젝트 파일의 심볼 테이블 확인
- 같은 이름의 심볼 탐색
- 실제 메모리 주소 연결
실행 과정
소스 코드
↓
컴파일
↓
심볼 생성
↓
심볼 테이블 저장
↓
링커가 심볼 참조
↓
실제 주소 연결
핵심 요약
- 심볼은 함수/변수를 식별하기 위한 이름표
- 심볼 테이블은 심볼들을 저장하는 테이블
- 오브젝트 파일마다 하나씩 존재
- 컴파일/어셈블 단계에서 생성됨
- 링크 단계에서 링커가 심볼을 참조하여 실제 주소를 연결함