누군가 C 및 C ++ 컨텍스트 내에서 기호 테이블이 무엇인지 설명 할 수 있습니까?
답변:
여기에 기호 테이블의 두 가지 공통적이고 관련된 의미가 있습니다.
첫째, 개체 파일에 기호 테이블이 있습니다. 일반적으로 C 또는 C ++ 컴파일러는 단일 소스 파일을 .obj 또는 .o 확장자를 가진 개체 파일로 컴파일합니다. 여기에는 링커가 작업 응용 프로그램 또는 공유 라이브러리로 처리 할 수있는 실행 코드 및 데이터 모음이 포함됩니다. 개체 파일에는 개체 파일의 여러 항목을 링커가 이해할 수있는 이름으로 매핑하는 심볼 테이블이라는 데이터 구조가 있습니다. 코드에서 함수를 호출하면 컴파일러는 루틴의 최종 주소를 객체 파일에 넣지 않습니다. 대신 자리 표시 자 값을 코드에 넣고 링커가 처리중인 모든 개체 파일에서 다양한 기호 테이블의 참조를 조회하고 거기에 최종 위치를 고정하도록 지시하는 메모를 추가합니다.
둘째, 공유 라이브러리 또는 DLL에 기호 테이블도 있습니다. 이것은 링커에 의해 생성되며 라이브러리 사용자에게 표시되는 모든 함수 및 데이터 항목의 이름을 지정하는 역할을합니다. 이를 통해 시스템은 런타임 링크를 수행하여 라이브러리가 메모리에로드 된 위치에 대한 해당 이름에 대한 열린 참조를 확인할 수 있습니다.
더 배우고 싶다면 John Levine의 훌륭한 책 "Linkers and Loaders"를 제안합니다. 링크 텍스트
Linux에서는 다음 명령을 사용할 수 있습니다.
nm [객체 파일]
해당 개체 파일의 기호 테이블을 나열합니다. 이 출력물에서 사용중인 링커 기호를 잘린 이름 에서 해독 할 수 있습니다 .
Symbol Table wikipedia 항목을 확인하십시오 .
심볼 테이블은 변수 이름, 함수 이름, 개체, 클래스, 인터페이스 등과 같은 다양한 개체의 발생에 대한 정보를 저장하기 위해 컴파일러에서 만들고 유지 관리하는 중요한 데이터 구조입니다.