it-swarm-ko.tech

심볼 테이블이란 무엇입니까?

누군가 C와 C++의 맥락에서 기호 테이블이 무엇인지 설명 할 수 있습니까?

78
jdt141

여기에는 심볼 테이블의 두 가지 공통된 의미가 있습니다.

먼저, 객체 파일에 심볼 테이블이 있습니다. 일반적으로 C 또는 C++ 컴파일러는 단일 소스 파일을 확장자가 .obj 또는 .o 인 오브젝트 파일로 컴파일합니다. 여기에는 링커가 작업 응용 프로그램 또는 공유 라이브러리로 처리 할 수있는 실행 코드 및 데이터 모음이 포함되어 있습니다. 객체 파일에는 심볼 테이블이라는 데이터 구조가 있으며, 객체 파일의 여러 항목을 링커가 이해할 수있는 이름으로 매핑합니다. 코드에서 함수를 호출하면 컴파일러는 루틴의 최종 주소를 객체 파일에 넣지 않습니다. 대신 자리 표시 자 값을 코드에 넣고 링커가 처리중인 모든 객체 파일에서 다양한 기호 테이블에서 참조를 찾아보고 최종 위치를 고수하도록하는 메모를 추가합니다.

둘째, 공유 라이브러리 또는 DLL에 심볼 테이블도 있습니다. 이것은 링커에 의해 생성되며 라이브러리 사용자에게 표시되는 모든 기능 및 데이터 항목의 이름을 지정하는 역할을합니다. 이를 통해 시스템은 런타임 링크를 수행하여 해당 이름에 대한 열린 참조를 라이브러리가 메모리에로드 된 위치로 해석합니다.

더 배우고 싶다면 John Levine의 훌륭한 저서 "링커와 로더"를 추천합니다 . link text

73
Ben Combee

간단히 말해 유형, 범위 및 크기와 같은 메타 데이터를 포함하여 변수를 메모리의 주소에 할당하는 이름의 매핑입니다. 컴파일러에서 사용합니다.

일반적으로 C [++] *가 아닙니다. 기술적으로 항상 직접 메모리 주소를 포함하지는 않습니다. 컴파일러가 어떤 언어, 플랫폼 등을 대상으로하는지에 달려 있습니다.

23
Steve Landey

Linux에서는 다음 명령을 사용할 수 있습니다.

nm [개체 파일]

해당 객체 파일의 심볼 테이블을 나열합니다.

13
user188276

기호 표는 프로그램/단위의 "기호"목록입니다. 기호는 대부분 변수 또는 함수의 이름입니다. 기호 테이블을 사용하여 메모리 변수 또는 함수의 위치를 ​​판별 할 수 있습니다.

8
Joe Schneider

Symbol Table 위키 백과 항목을 확인하십시오.

4
Allan Wind

기호 테이블은 변수 이름, 함수 이름, 객체, 클래스, 인터페이스 등과 같은 다양한 엔티티의 발생에 대한 정보를 저장하기 위해 컴파일러가 작성하고 유지 보수하는 중요한 데이터 구조입니다.

0
rashedcs