Czy ktoś może opisać, czym jest tablica symboli w kontekście C i C ++?
Odpowiedzi:
Istnieją tutaj dwa wspólne i powiązane znaczenia tablic symboli.
Po pierwsze, w twoich plikach obiektowych znajduje się tablica symboli. Zwykle kompilator C lub C ++ kompiluje pojedynczy plik źródłowy do pliku obiektowego z rozszerzeniem .obj lub .o. Zawiera zbiór wykonywalnego kodu i danych, które konsolidator może przetworzyć w działającą aplikację lub bibliotekę współdzieloną. Plik obiektowy ma strukturę danych zwaną tabelą symboli, która odwzorowuje różne elementy w pliku obiektowym na nazwy zrozumiałe dla konsolidatora. Jeśli wywołasz funkcję z kodu, kompilator nie umieści końcowego adresu procedury w pliku obiektowym. Zamiast tego umieszcza wartość zastępczą w kodzie i dodaje notatkę, która mówi konsolidatorowi, aby wyszukał odwołanie w różnych tabelach symboli ze wszystkich przetwarzanych plików obiektowych i umieścił tam ostateczną lokalizację.
Po drugie, istnieje również tabela symboli w bibliotece współdzielonej lub DLL. Jest to tworzone przez linker i służy do nazwania wszystkich funkcji i elementów danych, które są widoczne dla użytkowników biblioteki. Pozwala to systemowi na łączenie w czasie wykonywania, rozpoznawanie otwartych odwołań do tych nazw do lokalizacji, w której biblioteka jest ładowana do pamięci.
Jeśli chcesz dowiedzieć się więcej, proponuję doskonałą książkę Johna Levine'a „Łączniki i ładowarki”. tekst linku
Krótko mówiąc, jest to mapowanie nazwy, którą przypisujesz zmiennej do jej adresu w pamięci, w tym metadane, takie jak typ, zakres i rozmiar. Jest używany przez kompilator.
To generalnie, nie tylko C [++] *. Technicznie nie zawsze zawiera bezpośredni adres pamięci. Zależy to od języka, platformy itp., Na który jest przeznaczony kompilator.
W Linuksie możesz użyć polecenia:
nm [plik obiektu]
aby wyświetlić tablicę symboli tego pliku obiektowego. Z tego wydruku można następnie rozszyfrować używane symbole łącznika z ich zniekształconych nazw .
Tablica symboli to lista „symboli” w programie / jednostce. Symbole to najczęściej nazwy zmiennych lub funkcji. Tablica symboli może służyć do określenia, gdzie w pamięci zostaną umieszczone zmienne lub funkcje.
Sprawdź wpis w Wikipedii dotyczący tabeli symboli .
Tablica symboli to ważna struktura danych tworzona i utrzymywana przez kompilatory w celu przechowywania informacji o występowaniu różnych encji, takich jak nazwy zmiennych, nazwy funkcji, obiekty, klasy, interfejsy itp.