Birisi C ve C ++ bağlamında bir sembol tablosunun ne olduğunu açıklayabilir mi?
Yanıtlar:
Burada sembol tablolarının ortak ve ilişkili iki anlamı vardır.
İlk olarak, nesne dosyalarınızda sembol tablosu var. Genellikle, bir C veya C ++ derleyicisi, tek bir kaynak dosyasını .obj veya .o uzantılı bir nesne dosyasına derler. Bu, bağlayıcının çalışan bir uygulamaya veya paylaşılan kitaplığa işleyebileceği yürütülebilir kod ve veri koleksiyonunu içerir. Nesne dosyası, nesne dosyasındaki farklı öğeleri bağlayıcının anlayabileceği adlarla eşleştiren, içinde sembol tablosu olarak adlandırılan bir veri yapısına sahiptir. Kodunuzdan bir işlevi çağırırsanız, derleyici yordamın son adresini nesne dosyasına koymaz. Bunun yerine, koda bir yer tutucu değeri koyar ve bağlayıcıya işlediği tüm nesne dosyalarından çeşitli sembol tablolarındaki referansı aramasını ve son konumu oraya yapıştırmasını söyleyen bir not ekler.
İkinci olarak, paylaşılan bir kitaplıkta veya DLL'de sembol tablosu da vardır. Bu, bağlayıcı tarafından üretilir ve kitaplığın kullanıcıları tarafından görülebilen tüm işlevleri ve veri öğelerini adlandırmaya yarar. Bu, sistemin, bu adlara yönelik açık referansları kitaplığın belleğe yüklendiği konuma çözümleyerek çalışma zamanı bağlama yapmasına olanak tanır.
Daha fazlasını öğrenmek istiyorsanız, John Levine'in mükemmel kitabı "Linkers and Loaders" ı öneririm. bağlantı metni
Kısaca, tür, kapsam ve boyut gibi meta veriler dahil olmak üzere bir değişkeni bellekteki adresine atadığınız adın eşleştirilmesidir. Derleyici tarafından kullanılır.
Bu genel olarak, sadece C [++] * değil. Teknik olarak, her zaman doğrudan bellek adresini içermez. Derleyicinin hangi dili, platformu vb. Hedeflediğine bağlıdır.
Linux'ta şu komutu kullanabilirsiniz:
nm [nesne dosyası]
o nesne dosyasının sembol tablosunu listelemek için. Bu çıktıdan, daha sonra kullanımda olan bağlayıcı sembollerini karıştırılmış adlarından deşifre edebilirsiniz .
Sembol tablosu, bir program / birimdeki "semboller" listesidir. Semboller genellikle değişkenlerin veya işlevlerin isimleridir. Sembol tablosu, değişkenlerin veya fonksiyonların bellekte nerede konumlanacağını belirlemek için kullanılabilir.
Check out Sembol Tablosu wikipedia girişi.
Sembol tablosu, değişken isimleri, fonksiyon isimleri, nesneler, sınıflar, arayüzler vb. Gibi çeşitli varlıkların oluşumu hakkında bilgi depolamak için derleyiciler tarafından oluşturulan ve sürdürülen önemli bir veri yapısıdır.