기호 테이블이란?
누가 C와 C++의 맥락 안에서 기호표가 무엇인지 설명할 수 있는가?
여기에는 기호표의 두 가지 공통적이고 관련된 의미가 있다.
첫째, 오브젝트 파일에 기호 테이블이 있다.일반적으로 C 또는 C++ 컴파일러는 단일 소스 파일을 .obj 또는 .o 확장자의 객체 파일로 컴파일한다.여기에는 실행 가능한 코드와 링커가 작동 중인 응용 프로그램 또는 공유 라이브러리로 처리할 수 있는 데이터의 모음이 포함되어 있다.오브젝트 파일에는 오브젝트 파일의 여러 항목을 링커가 이해할 수 있는 이름에 매핑하는 기호 테이블이라는 데이터 구조가 있다.코드에서 함수를 호출하면 컴파일러는 루틴의 최종 주소를 오브젝트 파일에 넣지 않는다.대신 자리 표시자 값을 코드에 넣고 링커에게 자신이 처리 중인 모든 객체 파일에서 다양한 기호 테이블에서 참조를 찾아보고 거기에 최종 위치를 붙이라는 메모를 추가한다.
둘째, 공유 라이브러리 또는 DLL에 기호 테이블도 있다.이것은 링커에 의해 생산되며 도서관 사용자에게 보이는 모든 기능과 데이터 항목의 이름을 지정하는 역할을 한다.이를 통해 시스템은 해당 이름에 대한 공개 참조를 메모리에 라이브러리가 로드된 위치로 확인하면서 런타임 연결을 수행할 수 있다.
자세한 내용을 알고 싶다면 존 레빈(John Levine)의 훌륭한 책 "Linkers and Loaders".link text를 추천한다.
간단히 말해서, 그것은 유형, 범위, 크기와 같은 메타데이터를 포함하여, 메모리에 있는 주소에 변수를 할당하는 이름의 매핑이다.그것은 컴파일러에 의해 사용된다.
그것은 일반적으로 C[+]*만이 아니다.기술적으로, 그것은 항상 직접 메모리 주소를 포함하지는 않는다.컴파일러가 어떤 언어, 플랫폼 등을 목표로 하느냐에 따라 달라진다.
Linux에서는 다음 명령을 사용할 수 있다.
nm [객체 파일]
개체 파일의 기호 테이블을 나열하십시오.이 출력물에서 당신은 그 망치로 된 이름에서 사용중인 링커 기호를 해독할 수 있다.
기호 표는 프로그램/단위의 "기호" 목록이다.기호는 대부분 변수나 함수의 이름이다.기호표를 사용하여 메모리 변수나 함수의 위치를 결정할 수 있다.
기호 표 위키백과 항목을 확인하십시오.
기호표는 가변명, 함수명, 객체, 클래스, 인터페이스 등 다양한 실체의 발생에 관한 정보를 저장하기 위해 컴파일러가 생성·유지하는 중요한 데이터 구조다.
"컴퓨터 시스템 A 프로그래머의 관점" 책 "Ch 7 Linking"에서."기호 및 기호 테이블":
기호 표는 프로그램에서 정의되고 참조되는 기능 및 전역 변수에 대한 정보 입니다.
그리고 중요한 참고 사항(동일한 장 구성):
로컬 링커 기호가 로컬 프로그램 변수와 같지 않다는 것을 깨닫는 것이 중요하다.기호 테이블에는 로컬 비정적 프로그램 변수에 해당하는 기호가 포함되지 않는다.이는 스택의 런타임에 관리되며 링커에는 관심이 없다.
참조URL: https://stackoverflow.com/questions/69112/what-is-a-symbol-table
'programing' 카테고리의 다른 글
스프링 응용 프로그램 컨텍스트 가져오기 (0) | 2022.04.29 |
---|---|
C99가 아닌 구조체 내의 익명 결합? (0) | 2022.04.29 |
VueX 저장소 테스트 (0) | 2022.04.29 |
v-if 및 v-properties inside(다른 텍스트 렌더링용) (0) | 2022.04.29 |
내 앱 없이 VueX를 사용하는 구성 요소도 VueX를 사용할 수 있는가? (0) | 2022.04.29 |