《c 程式效能優化》 作業系統的記憶體管理

2021-05-24 10:45:19 字數 1140 閱讀 1226

第5章 作業系統的記憶體管理

長期以來記憶體是重要的計算機資源。在記憶體有限的情況下,虛擬記憶體的技術就引入了。

~window記憶體管理~

win32為每乙個win32程序提供了私有且基於頁的4gb(32位)大小的線性虛擬位址空間

2程序工作集

頻繁的調頁操作會引起磁碟i/o,會大大的降低程式的執行效率對於每乙個程序,虛擬記憶體管理器都會將其一定的記憶體駐留在記憶體裡,並跟蹤效能指標。工作集會動態變化的,如果所執行的**不再工作集中,則會引起額外的磁碟i/o,所以在虛擬記憶體調頁時不僅僅調入需要的頁,同時將附近的頁頁調入其中

3windows相關的api

在win32下,開發人員可以使用以下的5組函式

(1)傳統的crt函式(malloc/free)這組函式平台無關,可以移植到非win下

(2)global heap/local heap函式,global heap為系統所有程序共有的堆,local heap為每個程序私有的堆。不推薦使用。

(3)虛擬記憶體函式(virtualalloc/virtualfree)這組函式通過保留和提交虛擬記憶體的空間位址來操作記憶體。

(4)記憶體對映檔案函式,系統使用記憶體對映檔案函式來載入exe和ddl

(5)堆記憶體函式win32平台中每個堆都是各自程序私有的,每個程序除了預設的程序堆,還可以建立自己的程序堆

~linux~記憶體管理機制

1記憶體布局

-------------

核心 1gb

------------- 棧

-----

----- 堆

-----

bss --

data

-----

code

------------

2物理記憶體管理

使用的是兄弟堆演算法

與每個記憶體區域都有兄弟區域,當兩個區域都收回時,合併成乙個更大的區域,當有記憶體請求時找記憶體大小相適應的區域,否則對一塊大的區域進行劃分,直到找到合適大小的區域、

3虛擬記憶體管理

用來維護虛擬位址空間的資料結構是vm_area_struct,當vm_area_struct不超過32個時,vm_area_struct被連成乙個鍊錶,當超過32個時,這些vm_area_struct被組織成為平衡二叉樹。目的是提高查詢速率

C 應用程式效能優化 作業系統記憶體管理

1.工作集 概念 作業系統中駐留在物理記憶體中的記憶體頁成為程序的工作集。工作集的大小 作業系統為每個程序定義了最小工作集 20 50mb 和最大工作集 45 345mb 具體與系統的物理記憶體大小有關 工作集的增長 當執行到未被調入記憶體的 頁或資料頁時,這些頁會被調入記憶體,工作集隨之增長。當工...

C 程式效能優化

一段c程式,功能開發完成,開始效能優化。當然是先用 pg 編譯,再gprof看 熱點 在 很快找到,是計算hash值的函式,於是換了個更快的hash函式 fnv 速度提高了一些。接著把該hash函式內聯 inline 程式又快了一些。內聯函式不是解決效能問題的靈丹妙藥,因為inline之後gprof...

《C 應用程式效能優化》之程式記憶體

乙個程式占用的記憶體區通常分5種,如下 全域性 靜態資料區 儲存全域性變數和靜態變數 常量資料區 儲存程式中的常量 字串等,不可修改 區 儲存 資料 棧 儲存自動變數 區域性變數,傳遞引數 堆 使用者控制的儲存區,儲存動態產生的資料 程式在分配記憶體時為了加快訪問速度,採取的一種分配策略。每個特定平...