ใครสามารถอธิบายตารางสัญลักษณ์ภายในบริบทของ C และ C ++ ได้หรือไม่?
ใครสามารถอธิบายตารางสัญลักษณ์ภายในบริบทของ C และ C ++ ได้หรือไม่?
คำตอบ:
มีสองความหมายทั่วไปและเกี่ยวข้องกันของตารางสัญลักษณ์ที่นี่
ขั้นแรกมีตารางสัญลักษณ์ในไฟล์วัตถุของคุณ โดยปกติคอมไพเลอร์ C หรือ C ++ จะรวบรวมไฟล์ต้นฉบับเดียวลงในไฟล์อ็อบเจ็กต์ที่มีนามสกุล. obj หรือ. o สิ่งนี้ประกอบด้วยชุดของรหัสปฏิบัติการและข้อมูลที่ตัวเชื่อมโยงสามารถประมวลผลลงในแอปพลิเคชันที่ใช้งานได้หรือไลบรารีที่ใช้ร่วมกัน อ็อบเจ็กต์ไฟล์มีโครงสร้างข้อมูลที่เรียกว่าตารางสัญลักษณ์ซึ่งแม็พไอเท็มต่างๆในอ็อบเจ็กต์ไฟล์กับชื่อที่ผู้เชื่อมโยงสามารถเข้าใจได้ หากคุณเรียกใช้ฟังก์ชันจากโค้ดของคุณคอมไพลเลอร์จะไม่ใส่ที่อยู่สุดท้ายของรูทีนในอ็อบเจ็กต์ไฟล์ แต่จะใส่ค่าตัวยึดตำแหน่งลงในโค้ดและเพิ่มโน้ตที่บอกให้ผู้เชื่อมโยงค้นหาข้อมูลอ้างอิงในตารางสัญลักษณ์ต่างๆจากไฟล์ออบเจ็กต์ทั้งหมดที่กำลังประมวลผลและติดตำแหน่งสุดท้ายไว้ที่นั่น
ประการที่สองยังมีตารางสัญลักษณ์ในไลบรารีที่ใช้ร่วมกันหรือ DLL สิ่งนี้สร้างขึ้นโดยตัวเชื่อมโยงและทำหน้าที่ตั้งชื่อฟังก์ชันและรายการข้อมูลทั้งหมดที่ผู้ใช้ไลบรารีมองเห็นได้ สิ่งนี้ช่วยให้ระบบทำการเชื่อมโยงรันไทม์โดยการแก้ไขการอ้างอิงที่เปิดสำหรับชื่อเหล่านั้นไปยังตำแหน่งที่โหลดไลบรารีในหน่วยความจำ
หากคุณต้องการเรียนรู้เพิ่มเติมฉันขอแนะนำหนังสือ "Linkers and Loaders" ที่ยอดเยี่ยมของ John Levine ข้อความลิงก์
โดยสังเขปคือการแมปชื่อที่คุณกำหนดตัวแปรให้กับที่อยู่ในหน่วยความจำรวมถึงข้อมูลเมตาเช่นประเภทขอบเขตและขนาด มันถูกใช้โดยคอมไพเลอร์
โดยทั่วไปไม่ใช่แค่ C [++] * ในทางเทคนิคจะไม่รวมที่อยู่หน่วยความจำโดยตรงเสมอไป ขึ้นอยู่กับภาษาแพลตฟอร์ม ฯลฯ ที่คอมไพเลอร์กำหนดเป้าหมาย
ใน Linux คุณสามารถใช้คำสั่ง:
นาโนเมตร [ไฟล์วัตถุ]
เพื่อแสดงรายการตารางสัญลักษณ์ของอ็อบเจ็กต์ไฟล์นั้น จากผลงานพิมพ์นี้คุณสามารถถอดรหัสสัญลักษณ์ตัวเชื่อมโยงที่ใช้งานได้จากชื่อที่แตกต่างกัน
ตารางสัญลักษณ์คือรายการ "สัญลักษณ์" ในโปรแกรม / หน่วย สัญลักษณ์มักเป็นชื่อของตัวแปรหรือฟังก์ชัน ตารางสัญลักษณ์สามารถใช้เพื่อกำหนดตำแหน่งของตัวแปรหน่วยความจำหรือฟังก์ชันต่างๆ
ตรวจสอบรายการวิกิพีเดียตารางสัญลักษณ์
ตารางสัญลักษณ์เป็นโครงสร้างข้อมูลที่สำคัญที่สร้างและดูแลโดยคอมไพลเลอร์เพื่อจัดเก็บข้อมูลเกี่ยวกับการเกิดขึ้นของเอนทิตีต่างๆเช่นชื่อตัวแปรชื่อฟังก์ชันอ็อบเจ็กต์คลาสอินเทอร์เฟซเป็นต้น