1. 程式人生 > >程式和記憶體

程式和記憶體

如果你的電腦上安裝了QQ,你希望和好友聊天,會雙擊QQ圖示,開啟QQ軟體,輸入賬號和密碼,然後登入就可以了。

那麼,QQ是怎麼執行起來的呢?

首先,有一點你要明確,你安裝的QQ軟體是儲存在硬碟中的。

雙擊QQ圖示,作業系統就會知道你要執行這個軟體,它會在硬碟中找到你安裝的QQ軟體,將資料(安裝的軟體本質上就是很多資料的集合)複製到記憶體。對!就是複製到記憶體!QQ不是在硬碟中執行的,而是在記憶體中執行的。

為什麼呢?因為記憶體的讀寫速度比硬碟快很多。

對於讀寫速度,記憶體 > 固態硬碟 > 機械硬碟。機械硬碟是靠電機帶動碟片轉動來讀寫資料的,而記憶體條通過電路來讀寫資料,電機的轉速肯定沒有電的傳輸速度(幾乎是光速)快。雖然固態硬碟也是通過電路來讀寫資料,但是因為與記憶體的控制方式不一樣,速度也不及記憶體。

所以,不管是執行QQ還是編輯Word文件,都是先將硬碟上的資料複製到記憶體,才能讓CPU來處理,這個過程就叫作載入記憶體(Load into Memory)。完成這個過程需要一個特殊的程式(軟體),這個程式就叫做載入器(Loader)

CPU直接與記憶體打交道,它會讀取記憶體中的資料進行處理,並將結果儲存到記憶體。如果需要儲存到硬碟,才會將記憶體中的資料複製到硬碟。

例如,開啟Word文件,輸入一些文字,雖然我們看到的不一樣了,但是硬碟中的文件沒有改變,新增的文字暫時儲存到了記憶體,Ctrl+S才會儲存到硬碟。因為記憶體斷電後會丟失資料,所以如果你編輯完Word文件忘記儲存就關機了,那麼你將永遠無法找回這些內容。
虛擬記憶體


如果我們執行的程式較多,佔用的空間就會超過記憶體(記憶體條)容量。例如計算機的記憶體容量為2G,卻執行著10個程式,這10個程式共佔用3G的空間,也就意味著需要從硬碟複製 3G 的資料到記憶體,這顯然是不可能的。

作業系統(Operating System,簡稱 OS)為我們解決了這個問題:當程式執行需要的空間大於記憶體容量時,會將記憶體中暫時不用的資料再寫回硬碟;需要這些資料時再從硬碟中讀取,並將另外一部分不用的資料寫入硬碟。這樣,硬碟中就會有一部分空間用來存放記憶體中暫時不用的資料。這一部分空間就叫做虛擬記憶體(Virtual Memory)。

3G - 2G = 1G,上面的情況需要在硬碟上分配 1G 的虛擬記憶體。

硬碟的讀寫速度比記憶體慢很多,反覆交換資料會消耗很多時間,所以如果你的記憶體太小,會嚴重影響計算機的執行速度,甚至會出現”卡死“現象,即使CPU強勁,也不會有大的改觀。如果經濟條件允許,建議將記憶體升級為 4G,在 win7、win8、win10 下執行軟體就會比較流暢了。

總結:CPU直接從記憶體中讀取資料,處理完成後將結果再寫入記憶體
在這裡插入圖片描述

摘自:http://c.biancheng.net/cpp/html/2838.html