1. 程式人生 > >程式的指令和資料為什麼分開存放?

程式的指令和資料為什麼分開存放?

一、問題來源

學習《計算機組成原理》時有一個問題:計算機是如何區分程式的指令和資料的?

書本上的答案是這樣的(原話記不太清了,大概意思如下):機器週期(完整的執行一條指令)分為指令週期(取指令、分析指令、執行指令)和資料操作(從記憶體或者儲存器讀寫資料)。但對彙編裡(程式段program segment、資料段data segment)程式和資料為什麼需要分開存放沒有過多拷問,今天整理了部分資料得出如下結論,如有不足或紕漏還請指正!

二、結論

1、程序的操作許可權。程式被裝載後,資料和指令分別被對映至不同的虛存(OS概念,通過<輔+快取+記憶體>邏輯上擴大記憶體,試想4G記憶體是如何執行10G的LOL?)。程序對指令區和的資料區的訪問許可權不同,對於程式區需要讀寫,而指令區為只讀,防止指令被改寫(記憶體入侵)。

2、節省記憶體。對於程式中一段需要反覆處理資料的函式,若資料與指令混合裝載至記憶體,每次資料的不同必然導致記憶體的浪費。內涵可參考高階語言中的模版(程式碼去冗餘,節約空間)。