2013-06-29 30 views

回答

3

一般來說,有什麼應用級的程序員調用的內存真的只是一個地址空間。所以堆,堆棧,甚至程序段都只是一組地址。我們的程序(包括節點中的程序)使用這些地址讀取和寫入數據。我們把malloc稱爲「內存管理器」,但它確實應該是「地址管理器」。一個單獨的「虛擬內存」系統確定這些地址集是否映射到RAM,磁盤或根本沒有。駐留集是那些由RAM支持的地址。居民組的規模就是這個組的規模。

7

的方法是給定的存儲器由操作系統運行英寸在現代的32位和64位系統上,這個內存空間看起來像是一個可以處理的所有可能的內存地址的廣闊領域。實際上,操作系統對進程是「說謊」的,並且通常只能回收這個承諾,而只有部分內存可以被該進程解決。其餘的是「虛擬」。

由於CPU只能從RAM中的數據和代碼執行,因此OS與CPU一起工作以跟蹤程序使用的內存在RAM中,以及保存到磁盤上特殊文件的內容虛擬內存(即頁面文件/交換文件)。 RAM中的內容稱爲「常駐」或「工作」集。

這是重要的是知道的,因爲它需要訪問內存中已經存在RAM的時候開發商是許多數量級比如果OS從磁盤存儲第一加載到RAM中要快。設計保持關鍵數據駐留的程序比不關心內存如何分配和訪問的程序具有更高的性能特徵。

堆是敞開的存儲操作系統呈現給一個過程,組織成一個data structure bearing the same name的分區。該進程在執行時使用此組織來訪問(並追蹤以後的版本),一次只能訪問小塊。例如,如果進程想要存儲一個整數數組,它需要一個內存塊,其中的字節數應該是整數大小的元素。

這種劃分是在什麼樣的OS與交換確實頂部。我訪問堆存儲內存爲我的對象和數據結構在運行時字節的分配,但是這堆分配仍然住在OS給我的記憶,它在可移動的4096字節的「頁面」條款看從磁盤來回。

堆棧是OS給出進程的另一個特殊數據結構,但它不同之處在於它一次獲得所有堆棧,並且隨着進程按順序將項目放入堆棧,它將增加(或減少)一個特殊指針(通常是一個特殊的CPU寄存器)來跟蹤它在堆棧中的位置。在更高層次上,每個線程都會跟蹤堆棧以及指針在堆棧中的位置。局部變量,函數參數和返回指針被存儲在這裏,當進程執行以跟蹤這些事件時,指針在這個內存上增加和減少。