c++/기초

심볼과 심볼 테이블

코드망령 2026. 5. 20. 09:35

심볼(Symbol)과 심볼 테이블(Symbol Table)

외부 라이브러리나 다른 파일에 있는 함수, 전역 변수의 위치를 찾기 위해 사용됨

컴파일 과정에서 생성되며, 이후 링크 단계에서 링커가 이를 참조하여 실제 메모리 주소를 연결함


심볼 (Symbol)

  • 함수나 전역 변수를 식별하기 위한 정보
  • 객체 자체가 아니라 객체를 가리키는 이름표

 


예시

void Attack()
{
}

int HP = 100;

생성되는 심볼 예시:

Attack
HP

심볼이 포함하는 정보

  • 함수/변수 이름
  • 섹션 정보
  • 오프셋(상대 위치)
  • 참조 정보

 

심볼 테이블 (Symbol Table)

  • 심볼들을 저장하는 테이블

특징

  • 오브젝트 파일 하나당 하나씩 존재
  • 컴파일/어셈블 단계에서 생성
  • 오브젝트 파일 내부 메타데이터로 저장됨

왜 필요한가?

다른 파일의 함수나 변수를 사용하려면 위치를 알아야 하기 때문

예시:

// A.cpp
void Attack()
{
}
// B.cpp
extern void Attack();

Attack();

B.cppAttack()의 실제 위치를 모르기 때문에:

Attack 심볼

을 참조하여 링크 단계에서 연결함


링크 단계에서의 역할

  • 각 오브젝트 파일의 심볼 테이블 확인
  • 같은 이름의 심볼 탐색
  • 실제 메모리 주소 연결

실행 과정

소스 코드
↓
컴파일
↓
심볼 생성
↓
심볼 테이블 저장
↓
링커가 심볼 참조
↓
실제 주소 연결

핵심 요약

  • 심볼은 함수/변수를 식별하기 위한 이름표
  • 심볼 테이블은 심볼들을 저장하는 테이블
  • 오브젝트 파일마다 하나씩 존재
  • 컴파일/어셈블 단계에서 생성됨
  • 링크 단계에서 링커가 심볼을 참조하여 실제 주소를 연결함

'c++ > 기초' 카테고리의 다른 글

자료형  (0) 2026.05.22
운영체제  (0) 2026.05.21
링크 단계  (0) 2026.05.20
어셈블리 단계  (1) 2026.05.20
컴파일 단계  (0) 2026.05.20