知識積累->目標文件裏有什麼(1)

程序源代碼被編譯後主要分成兩種段:程序指令和程序數據,代碼屬於程序指令,而數據段和.bss屬於程序數據。

爲什麼程序指令和數據不混在在一起而是分開放?

1.因爲程序被裝載後,數據和指令分別被映射到兩個虛存區域。由於數據區域對於進程來說是可讀寫的

指令區域對於進程來說是可讀的。所以這兩個虛存區域的權限可以分別被設置成可讀寫可只讀,可以防止程序的指令被有意或無意地改寫。

2.對於現在的CPU來說,有極爲強大的緩存,由於緩存對於現在計算機中地位非常重要。程序必須儘量提高緩存的命中率,指令區和數據區的分離有利於提高程序的局部性。

現代CPU的緩存一般都被設計成數據緩存和指令緩存分離,所以指令和數據分開存放對CPU的緩存命中率提高有好處。

3.最重要的原因:當系統中運行着多個該程序的副本時,它們的指令都是一樣的。內存中只需要保存一份改程序的指令部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章