爲什麼會有data segment?

我有一個疑問,彙編裏爲什麼會有data segment?爲什麼要把data segment和 code segment分開來?

直接把指令和數據放在一起不好嗎?


維基上說:

"data segment is a portion of virtual address space of a program, which contains the global variables and static variables that are initialized by the programmer."

就是說,data segment 是用來存全局變量和靜態變量的內存區域。

問題:如果這些全局變量放在了code segment裏,那會怎麼樣?


我猜測:存放了全局變量和靜態變量的data segment ,有點像程序之間的共享區域,不同的函數/指令段間的代碼互相獨立(這裏的獨立是指從邏輯上來說的,在物裏內存裏,它們當都是連在一起、難以分辨的二進制數),分成一個模塊和另一個模塊,但共同享有這些程序變量,像一個通信機制。

data segment 就一個函數/指令段之間相互通信的protocol !

例如我們定義了一個全局變量 int a; 假設有一個函數fa() 對a 的值作出改變,此後,如果另一個函數fb() 讀到a時, 就會發現a 與原來的值不一樣了,這樣就會影響 fb()的行爲。所以這是 相互獨立的 fa() 和 fb() 兩者間通過改變 共享的全局變量 a 來互相影響對方的行爲。


下一個問題:

全局變量放在了code segment裏,那麼,局部變量保存在哪裏呢?(這個問題要問題在編譯那部分的知識裏找到答案了)。

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