Linux 記憶體管理

2021-07-10 21:21:29 字數 993 閱讀 9418

記憶體管理

什麼是記憶體?

記憶體是一種稀缺資源。

linux程式不允許直接訪問物理記憶體,都通過虛擬記憶體的方式訪問。

實體地址

虛擬位址

linux通過核心的」儲存管理」,給使用者提供了」虛擬記憶體」。

虛擬記憶體可以比實際的物理記憶體大。

記憶體分配

1)簡單的記憶體分配

使用malloc

以位元組為單位進行分配

返回乙個虛擬記憶體位址。

返回的型別是void *, 需要進行型別轉換。

注: int *buff = malloc(1024);

//在賦值時,進行了自動型別轉換

//建議進行顯式型別轉換:int buff = (int)malloc(1024);

不能對void*型別的指標直接讀寫。

對void*型別指標進行訪問時,需要先進行型別轉換。

例項:main1.c

分配大量的記憶體

可以使用malloc分配大塊的記憶體。

malloc能分配的記憶體總量可以比實際物理記憶體大。

例項:main2.c

當物理記憶體快耗盡時,linux將使用「交換空間」

交換空間是當安裝linux系統時分配的乙個磁碟空間。

linux把物理記憶體中的某些頁「搬」到交換空間中,以得到更大的物理記憶體。

當物理記憶體和交換空間都耗盡時,linux核心則把該應用程式「殺死」。

例項:main3.c

記憶體的惡意使用

當非法使用記憶體時,將產生「段錯誤」

例項: main4.c

空指標的使用

linux不允許訪問空指標。

例項:main5.c

記憶體的釋放

free的引數,必須是malloc(或calloc/realloc)返回的指標!

例項:main6.c

其他分配函式

calloc

realloc

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心,...

Linux記憶體管理

首先我要說,我這是轉貼,轉的cu論壇上 nonameboy 的帖子,你可以連線過去看看。今天因為要解釋系統中可用記憶體的大小,用google看了半天,還有在cu上找了關天,竞然沒有發現有比較好的章,估計很多人都沒有注意到,懂了以後又沒有整理出來。在cu上看了很多文章說什麼memory leak和li...