顯然,編譯器必須存儲變量x是無符號整數還是有符號整數,浮點或其他什麼,但是在哪裏以及如何存儲信息?編譯器如何在內存中存儲關於變量類型的信息?
是否有某種查詢表?我在內存中的哪個位置可以找到它,可執行文件的哪一部分?
顯然,編譯器必須存儲變量x是無符號整數還是有符號整數,浮點或其他什麼,但是在哪裏以及如何存儲信息?編譯器如何在內存中存儲關於變量類型的信息?
是否有某種查詢表?我在內存中的哪個位置可以找到它,可執行文件的哪一部分?
隱含的,在編譯器選擇的指令中。
舉例來說,如果地址18包含一個float
,編譯器可使用指令,從地址18加載一個浮點寄存器而如果它的鄰居在地址20包含在int
,編譯器可以加載從整數寄存器前面的地址+ 2.
如前所述,編譯器有一個符號表,因此它知道所有變量的位置。這使它可以選擇正確的說明。但是你不能簡單地從單個指令中得出符號表的內容。
它被稱爲符號表。 http://stackoverflow.com/questions/69112/what-is-a-symbol-table – erbdex
是的,輸出對象文件(.o,.obj)中包含一個符號表,用於存儲每個類型和名稱變量以及返回類型,調用約定,參數等...用於翻譯單元中的每個函數(通常爲.c或.cpp文件)。但是,在鏈接並生成可執行文件後,此信息可能會丟失**,在這種情況下,您需要調試符號表。但是你不會在內存中找到它,通常調試符號存儲在一個單獨的文件中並由調試器單獨使用;他們不需要你的程序運行。 –
你只是好奇編譯過程如何工作,或者在這個問題下面有更大的問題嗎?如果你*神奇*擁有這些信息,你會在你的程序中使用它嗎?怎麼樣? – chwarr