malloc vs memsetspa
OS內存分配過程以下:接口
- 用戶態程序使用malloc接口,分配虛擬地址。
- 用戶程序訪問該虛擬地址,好比memset。
- 硬件(MMU)須要將虛擬地址轉換爲物理地址。
- 硬件讀取頁表。
- 硬件發現相應的頁表項不存在,硬件自動觸發缺頁異常。
- 硬件自動跳轉到page fault的處理程序(內核實現註冊好)
- 內核中的page fault處理程序執行,在其中分配物理內存,而後修改頁表(建立頁表項)
- 異常處理完畢,返回程序用戶態,繼續執行memset相應的操做。
至此,虛擬內存和物理內存都分配完成,並完成映射。另外一個角度看,若是malloc分配內存後,一直不使用,那就一直不會分配物理內存,這種內存分配策略叫延遲分配內存