程式的指令和資料為什麼分開存放?
一、問題來源
學習《計算機組成原理》時有一個問題:計算機是如何區分程式的指令和資料的?
書本上的答案是這樣的(原話記不太清了,大概意思如下):機器週期(完整的執行一條指令)分為指令週期(取指令、分析指令、執行指令)和資料操作(從記憶體或者儲存器讀寫資料)。但對彙編裡(程式段program segment、資料段data segment)程式和資料為什麼需要分開存放沒有過多拷問,今天整理了部分資料得出如下結論,如有不足或紕漏還請指正!
二、結論
1、程序的操作許可權。程式被裝載後,資料和指令分別被對映至不同的虛存(OS概念,通過<輔+快取+記憶體>邏輯上擴大記憶體,試想4G記憶體是如何執行10G的LOL?)。程序對指令區和的資料區的訪問許可權不同,對於程式區需要讀寫,而指令區為只讀,防止指令被改寫(記憶體入侵)。
2、節省記憶體。對於程式中一段需要反覆處理資料的函式,若資料與指令混合裝載至記憶體,每次資料的不同必然導致記憶體的浪費。內涵可參考高階語言中的模版(程式碼去冗餘,節約空間)。
相關推薦
程式的指令和資料為什麼分開存放?
一、問題來源 學習《計算機組成原理》時有一個問題:計算機是如何區分程式的指令和資料的? 書本上的答案是這樣的(原話記不太清了,大概意思如下):機器週期(完整的執行一條指令)分為指令週期(取指令、分析指令、執行指令)和資料操作(從記憶體或者儲存器讀寫資料)。但對彙編裡(程式
系統流程圖,程式流程圖和資料流圖
系統流程圖(System Flowchart):是描繪系統物理模型的傳統工具。它的基本思想是用圖形符號以黑盒子形式描繪系統裡面的每個部件(程式、檔案、資料庫、表格、人工過程等),表達資訊在各個部件之間流動的情況和系統的操作控制。 就機房收費系統為例,系統流程圖如下:
軟體工程中的那些圖:系統流程圖,程式流程圖和資料流圖
軟體工程看完後,開始著手寫有關機房收費系統的軟工文件。可是其中的各種圖把我搞得頭疼,於是我把軟體工程中提到的那些圖總結了一下,還望眾位大神指正! 系統流程圖(System Flowchart):是描繪系統物理模型的傳統工具。它的基本思想是用圖形符號以黑盒子形式描繪系統裡
linux下的DB2資料庫表結構和資料分開的備份,還原到windows下,環境如下
生產伺服器A:作業系統:linux 記憶體:64G 這是生產機的環境,配置比較好。 測試伺服器B: 作業系統:windows 記憶體:6G windows編碼格式和內碼表對照表:https://msdn.microsoft.com/en-us/library/
1-系統方案A(系統方案演示和執行第一個Android程式,ListView顯示資料,刪除資料)
系統教程初步要做到的就是12節和13節所演示的 12節: https://www.cnblogs.com/yangfengwu/p/9966702.html 13節: https://www.cnblogs.com/yangfengwu/p/9966901.html
Java程式設計師,想嘗試大資料和資料探勘,該怎麼規劃學習?
一.大資料方向工作介紹 二.大資料工程師的技能要求 三.大資料學習路徑 四.學習資源推薦(書籍、部落格、網站) 一.大資料方向工作介紹 大資料方向的工作目前分為三個主要方向: 01.大資料工程師 02.資料分析師 03.大資料科學家 04.其他(資料探勘本
《程式設計珠璣》程式碼之路5:格式信函程式設計----將資料和程式碼分開的好處
我們開啟一些網站,經常會看到不同客戶專屬資訊,例如: Welcome back, Jane! We hope that you and all the members of the Public family are constantly reminding your neighbers the
差勁的程式設計師操心程式碼,優秀的程式設計師操心資料結構和它們之間的關係! ------ Linus Torvalds, Linux創始人.
Kafka log的儲存解析: Partition中的每條Message由offset來表示它在這個partition中的偏移量,這個offset不是該Message在partition資料檔案中的實際儲存位置,而是邏輯上一個值,它唯一確定了partition中的一條Mes
Java併發程式設計基礎//程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行棧和程式計
1.實現多執行緒的兩種方式: (1)繼承Thread類; (2)實現Runnable介面 //程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行
一、利用Visual Studio 2010建立第一個基於服務和資料驅動的Silverlight應用程式
(1)、開啟VisualStudio 2010,新建一個Silverlight應用程式專案,如下圖:選擇Silverlight應用程式,如圖點選確定按鈕,選擇在新網站中承載Silverlight應用程式Visual Studio 2010為我們建立好的介面如下:(2)、接下來
java程式設計師菜鳥進階(二)oracle基礎詳解(二)oracle查詢語句和資料排序
本文所以練習都是基於oracle自帶提供的一個數據庫進行的。資料庫中包含員工表emp。部門資訊表dept。員工工資工總表下面是三個表的表結構:一:基本查詢語句1.最簡單的查詢所有列語句Select * from emp;2.查詢指定列表的查詢語句Select empno ,e
【差勁的程式設計師操心程式碼,優秀的程式設計師操心資料結構和它們之間的關係! ------ Linus Torvalds, Linux創始人.】努力奮鬥
專欄達人 授予成功建立個人部落格專欄
Qt小程式(七)——獲取資料夾和檔案路徑
目錄 前言 這篇博文躺在草稿箱裡很久了,一直沒有完成!主要時間一過,就忘記了原來要寫什麼 內容了!記得在哪裡看過這句話:今天的事如果不完成,或許你永遠都不會完成了!這裡把這篇博文就記錄Qt中讀取資料夾和檔案路徑。 QWidget/QDialo
UDP網路程式傳送和接收資料
建立一個基於udp的網路程式流程很簡單,具體步驟如下: 1.建立客戶端套接字 2.傳送/接收資料 3.關閉套接字 UDP傳送和接收資料 在 Python 中 使用socket 模組的函式 socket 就可以完成: import socket #
一個 JS 庫就能解決小程式跨頁傳遞事件訊息和資料
由於微信小程式 wx.navigateBack 方法並不支援返回傳值,導致頁面在返回後,不能方便地即時更新資料。 一.需求分析 此類需求大概意思是:A 頁面進入 B 頁面,B 頁面返回並傳值給 A或在B頁面觸發事件時,A頁面也有事件觸發改變。 業務分析
廖雪峰Java-Java程式基礎-變數和資料型別
1.變數 變數是可以持有某個基本型別的數值,或者指向某個物件。 變數必須先定義後使用 定義: 變數型別 變數名 = 初始值; 2.java基本資料型別 整數型別:long int short byte 浮點型別:double float 布林型別:boolean 字元型別:char 計
spark程式打jar包,把程式包和依賴包分開
1.首先在pom.xml檔案中新增外掛 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin<
為什麼嵌入式LINUX核心和根檔案系統分開存放
http://wxqxq520.blog.sohu.com/164207588.html Flash 的分割槽可以根據需要劃分,uClinux 中支援Flash 儲存器的塊裝置驅動負責定義上述的分割槽。和PC 機下的Linux 不同,Flash 的分割槽把系統核心檔案
mysql 5.5 的預設配置檔案和資料檔案的存放路徑
"C:\Program Files\MySQL\MySQL Server 5.5\" # Path to the database root datadir="C:\ProgramData\MySQL\MySQL Server 5.5\data\" # The default character set
表資料和索引資料分開獨立表空間儲存優點
Oracle資料庫的邏輯結構和物理結構 Oracle 資料庫的邏輯結構是由一些資料庫物件組成,如資料庫表空間、表、索引、段、檢視、儲存過程、觸發器等。資料庫的邏輯儲存結構(表空間等)決定了資料庫的物理空間是如何被使用的,資料庫物件如表、索引等分佈在各個表空間中。 Oracle 資料庫的物理結構從作業