2011-08-31 42 views
13

我正在閱讀裝配圖書。該書解釋說,在計算機內存中有.text和.data部分。本書中的示例還使用以下源代碼。爲什麼我們需要在程序集中定義.data和.text部分?

[SECTION .data] 

[SECTION .text] 

因爲上面的代碼片段是用匯編寫的,所以我有一個問題。

是否在物理內存中分隔.data和.text代碼(如果是這樣,爲什麼?以及CPU是否關心?)?或者只是我們(人類)用匯編語言將它們分開?

回答

15

應用程序的文本部分是隻讀的,而數據不是。無論應用程序啓動了多少次,許多操作系統都只將文本部分加載到內存中。這減少了內存使用和啓動時間,並且安全,因爲代碼不會改變。 數據部分包含可在應用程序執行期間更改的信息,並且必須爲每個實例複製此部分。

+0

// so ...這個操作系統是否被指定?假設我正在編寫自己的操作系統(不打算這麼做:)),我是否需要遵循這個約定? – Moon

+0

讓他們分開是明智的做法,因爲那樣你就可以對與該部分相關的每個部分做些事情。例如,您可能需要爲程序的這些不同部分設計不同的內存交換輸入/輸出規則,內存保護代碼和連續存儲強制。 – Pete855217

+1

是的我認爲這是操作系統特定的,你不需要在你自己的操作系統中遵循這個約定。即使是現在,操作系統也允許將文本部分從只讀改爲讀寫,並在調試應用程序或某些調試API中寫入,例如http://msdn.microsoft.com/en-us/library/ms681674(v=vs。 85)的.aspx。 但對於正常使用不在您的操作系統中,我將遵循此規則。 – Zuljin

相關問題