문제

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

도움이 되었습니까?

해결책

여기에는 기호 테이블의 두 가지 공통적이고 관련된 의미가 있습니다.

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

둘째, 공유 라이브러리나 DLL에도 기호 테이블이 있습니다.이는 링커에 의해 생성되며 라이브러리 사용자에게 표시되는 모든 함수 및 데이터 항목의 이름을 지정하는 데 사용됩니다.이를 통해 시스템은 런타임 링크를 수행하고 라이브러리가 메모리에 로드된 위치에 대한 해당 이름에 대한 공개 참조를 확인할 수 있습니다.

더 자세히 알고 싶다면 John Levine의 뛰어난 책 "Linkers and Loaders"를 추천합니다.링크 텍스트

다른 팁

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

이는 C[++]*뿐만 아니라 일반적으로 그렇습니다.기술적으로 직접 메모리 주소가 항상 포함되는 것은 아닙니다.언어, 플랫폼 등에 따라 다릅니다.컴파일러가 타겟팅하고 있습니다.

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

nm [객체 파일]

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

기호 테이블은 프로그램/유닛의 "기호" 목록입니다.기호는 대부분 변수나 함수의 이름입니다.기호 테이블을 사용하여 메모리 변수나 함수가 위치할 위치를 결정할 수 있습니다.

확인해 보세요 기호표 위키피디아 항목.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top