Windows下的記憶體是如何管理的?

2021-07-10 21:17:16 字數 1390 閱讀 1765

參考資料:

(1)有三種方法:虛擬記憶體,記憶體對映檔案,記憶體堆疊。

虛擬記憶體是將頁檔案載入到記憶體,適用於比較大的物件或結構;

記憶體對映檔案是將磁碟上檔案載入到記憶體,適用於大檔案和單機的程序間記憶體共享;

堆疊就是動態的分配記憶體,適用於小物件的建立。

這些在windows核心程式設計中都描述得很詳細的。

if(資料在物理記憶體中)

else

else }

else }

(3)當程式執行時需要從記憶體中讀出這段程式的**。

**的位置必須在物理記憶體中才能被執行,由於現在的作業系統中有非常多的程式執行著,記憶體中不能夠完全放下,所以引出了虛擬記憶體的概念。把哪些不常用的程式片斷就放入虛擬記憶體,當需要用到它的時候在load入主存(物理記憶體)中。這個就是記憶體管理所要做的事。記憶體管理還有另外一件事需要做:計算程式片段在主存中的物理位置,以便cpu排程。

記憶體管理有塊式管理,頁式管理,鍛式和鍛頁式管理。現在常用事鍛頁式管理 塊式管理:把主存分為一大塊、一大塊的,當所需的程式片斷不在主存時就分配一塊主存空間,把程 序片斷load入主存,就算所需的程式片度只有幾個位元組也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的記憶體空間,但時易於管理。

頁式管理:把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。

段式管理:把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高很多,但是也有另外乙個缺點。乙個程式片斷可能會被分為幾十段,這樣很多時間就會被浪費在計算每一段的實體地址上(計算機最耗時間的大家都知道是i/o吧)。

鍛頁式管理:結合了段式管理和頁式管理的優點。把主存分為若干頁,每一頁又分為若干段。好處就很明顯,不用我多說了吧。

各種記憶體管理都有它自己的方法來計算出程式片斷在主存中的實體地址,其實都很相似。

1)對計算機而言,物理記憶體的大小即主機板上插著的記憶體條的大小;對cpu而言,的物理記憶體的大小即cpu上位址線可定址的大小。

2)虛擬記憶體即某個程式執行時所建立的資料區,它的大小可能大於物理記憶體,它是一種記憶體管理上的抽象。

3)由於虛擬記憶體很可能大於物理記憶體,所以作業系統使用一種記憶體分頁機制,將虛擬記憶體分成多個頁(page),將物理記憶體分成多個頁幀(page frame),頁和頁幀的大小相同。現使用的虛擬記憶體頁將會通過頁表(page table)對映到物理記憶體頁幀上,顯然實時對映的範圍最大只能是物理記憶體的大小範圍。如果現需使用的某個虛擬記憶體頁沒有處於這個對映當中,則作業系統使某個使用較少的頁幀失效,並將該頁幀的內容存入其他媒介當中(比如磁碟),然後在該頁幀的物理記憶體和需要空間的虛擬記憶體頁對映起來。

4)虛擬記憶體位址由頁號(與頁表中的頁號關聯)和偏移量組成。

Windows下VIM使用Vundle管理外掛程式

windows下vim使用vundle管理外掛程式 首先安裝gvim和git,將c program files git cmd加入到path環境變數中,之後在cmd中執行 git clone vim bundle vundle 在 vimrc檔案中新增如下配置 配置vundle開始 開始vundle...

windows下共享記憶體

建立共享記憶體 define buf size res 1025 invalid handle value,物理檔案控制代碼 null,預設安全級別 page readwrite,可讀可寫 0,高位檔案大小 buf size res,地位檔案大小 sznameresult 共享記憶體名稱 char ...

windows下共享記憶體的使用

windows下程序通訊有很多方式,跨裝置通訊一般使用 tcp udp,如果在同一臺電腦上 使用 管道 和 共享記憶體還是比較方便的。下面說下windows下共享記憶體的使用。程序一 1 建立共享記憶體區域 include include using namespace std define buf...