題目描述編譯程序編譯C語言的過程中,必須要通過操作符號表來確定各個被定義的符號(變量,數組,函數,標簽等)的地址,以便于將文本形式的代碼翻譯為二進制機器碼.而所得到的ELF文件(.o/.exe)中的符號表節區(.symtab)只包含存儲類型為static/extern的變量,而不包含auto局部變量.那么,局部變量是如何被編譯器翻譯的?題目來源及自己的思路來源: 編譯過程必須依靠符號表來實現.編譯過程輸出ELF文件,而ELF文件的符號表節區(.symtab)并不包含局部變量.那么,局部變量是如何編譯的呢?自己的思路: 1.ELF文件是編譯過程的輸出,是最終的結果,它的符號表節區(.symtab)也僅僅是符號表操作的最終結果,無法反映整個編譯過程的符號表變化.所以,在編譯過程進行的時候,局部變量是會出現在符號表之中的,而編譯程序據此確定局部變量的地址(局部變量位于棧中,其地址是相對棧指針sp的偏移量),進而實現對局部變量的翻譯.2.符號表的操作包含增加項目,查找項目,刪除項目.在編譯過程結束時,會跳出所有的函數與塊作用域,相應的,棧內存也會進行出棧操作.而與之相關的局部變量也會從符號表之中被刪除掉,只保留靜態變量static,全局變量以及外部變量extern.所以,最終的輸出ELF文件的符號表節區(.symtab)沒有局部變量的內容.問題期望1.上述的思路是否正確?2.如果不正確,錯誤在哪?要理解正確的思路,需要查找哪些方面的知識?
- 2 回答
- 0 關注
- 723 瀏覽
添加回答
舉報
0/150
提交
取消