목차
- 01. Intro
- 02. 심볼과 심볼 테이블
- 정의 및 기능
- 심볼은 객체인가?
- 심볼 테이블은 어디에 위치할까?
- 03. 마무리
- 04. 연관 내용
01. Intro
이전에 알아봤던 컴파일 단계와 링크 단계에서의 [심볼]과 [심볼 테이블]에 대해 자세히 알아보겠습니다.
02. 심볼과 심볼 테이블
이전 글에서 심볼과 심볼 테이블의 기능에 대해서 설명을 했으나 한 번 더 진행하고 넘어가겠습니다.
정의 및 기능
심볼과 심볼 테이블은 외부 라이브러리의 함수나 전역 변수가 어디에 위치해 있는지 알기 위해 사용됩니다.
심볼은 함수나 전역 변수의 이름과 주소를 등록하기 위한 식별자입니다.
심볼 테이블은 각 심볼을 저장하고 있는 곳입니다.
따라서, 심볼 테이블은 각 오브젝트 파일마다 하나씩 존재합니다.
컴파일 단계에서 심볼을 생성하고 생성된 심볼을 심볼 테이블에 등록합니다.
링크 단계에서 링커가 해당 심볼에 대해서 참조하고 메모리 주소를 연결해줍니다.
심볼은 객체인가?
컴파일 과정을 공부하던 중, 심볼은 함수와 전역 위치를 참조하고 있다고 해서 일종의 객체인지 궁금해졌습니다.
결론부터 말하면, 심볼은 객체가 아닙니다.
객체는 실제 데이터나 기능을 가지고 있는 실체입니다.
하지만, 심볼은 그 객체를 식별하는 이름과 해당 객체가 위치한 메모리 주소를 포함합니다.
그래서, 심볼 자체는 객체가 아니지만, 객체를 식별하고 연결하는 주소를 포함한 레퍼런스입니다.
따라서, 심볼은 객체보다는 객체를 참조하는 식별자로 이해하는 것이 더 정확합니다.
심볼 테이블은 어디에 위치할까?
심볼을 등록할 수 있는 심볼 테이블은 어디에 위치하는지 궁금해졌습니다.
먼저, 심볼과 심볼 테이블은 모두 메타데이터(Metadata)로 저장됩니다.
그러면, 먼저 메타데이터에 대해서 알아보겠습니다.
메타데이터(Metadata)란?
메타데이터는 어떤 데이터를 설명하는 추가 정보를 의미합니다.
예를 들어서, 사진 파일이 있습니다.
해당 사진에는 이미지 정보뿐만 아니라 촬영 날짜, 촬영 장소 등의 정보도 포함되어 있습니다.
이때, 사진에 대한 부가적인 정보인 촬영 날짜와 촬영 장소를 메타데이터라고 합니다.
그래서, 심볼과 심볼 테이블은 C++ 소스 코드의 함수와 전역 변수에 대한
이름, 위치 등의 부가적인 정보를 담고 있는 메타데이터가 되는 것입니다.
이러한 메타데이터의 특징은 사용자가 직접 접근할 필요는 없습니다.
하지만, 시스템이 해당 데이터를 바탕으로 다양한 활용을 할 수 있는 중요한 정보입니다.
심볼과 심볼 테이블의 위치는?
심볼과 심볼 테이블은 파일 자체에 저장된 정보입니다.
따라서, 심볼과 심볼 테이블은 프로세스의 메모리 4개 영역인 데이터, 코드, 힙, 스택 중 어느 영역에도 속하지 않습니다.
이는 심볼 테이블이 실행 중에 접근하는 메모리 영역이 아니라 컴파일러와 링커가 사용하는 메타데이터 정보이기 때문입니다.
03. 마무리
컴파일 과정에 대한 작성을 마무리했습니다.
이제부터는 언리얼 엔진과 프로젝트를 하면서 구현했던 기능 리뷰도 추가적으로 작성해 보겠습니다.
04. 연관 내용
- [C++] 컴파일 과정 - 2. 컴파일 단계
[C++] 컴파일 과정 - 2. 컴파일 단계
목차Intro01. 컴파일 단계오브젝트 파일기계어로 변환 과정심볼 생성 및 심볼 테이블 등록02. 연관 내용Intro어제 컴파일 과정 중 첫 번째 단계인 '전처리 단계'를 알아봤습니다.오늘은 전처리 다음
epidemic-barcode.tistory.com
- [C++] 컴파일 과정 - 3. 링크 단계
[C++] 컴파일 과정 - 3. 링크 단계
목차01. Intro02. 링크 단계오브젝트 파일 병합심볼 해석주소 할당재배치라이브러리 연결03. 마무리04. 연관 내용01. Intro어제 컴파일 과정 중 두 번째 단계인 '컴파일 단계'를 알아봤습니다.오늘은
epidemic-barcode.tistory.com
읽어주셔서 감사합니다.
틀린 내용 지적은 언제나 환영입니다!
'게임 개발 > C++' 카테고리의 다른 글
| [C++] 오버라이딩 - 1. 정적 & 동적 (0) | 2025.02.24 |
|---|---|
| [C++] Class vs Struct (0) | 2025.02.23 |
| [C++] 컴파일 과정 - 3. 링크 단계 (0) | 2025.02.21 |
| [C++] 컴파일 과정 - 2. 컴파일 단계 (0) | 2025.02.20 |
| [C++] 컴파일 과정 - 1. 전처리 단계 (2) | 2025.02.19 |