Linux下記憶體管理函式

2021-09-25 15:50:25 字數 1085 閱讀 3687

#include

void *sbrk(intptr_t increment)

increment

0 獲取未分配前的記憶體首位址(也就是已經分配記憶體的尾位址)

大於0 增加記憶體空間

小於0 釋放記憶體空間

返回值:未分配前的記憶體首位址,以位元組為單位。

int brk(void *addr)

它們背後維護著的乙個指標,該指標記錄的是未分配的記憶體的首位址(當前堆記憶體的最後乙個位元組的下乙個位置)。它們都可以用來對映記憶體和取消對映(系統級的記憶體管理),但為了方便起見,sbrk一般用於分配記憶體,brk用於釋放記憶體。

注意:sbrk/brk分配和釋放的都是使用權,真正的對映工作由其它系統呼叫完成(mmap/munmap)。

#include

void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

功能:把虛擬記憶體與物理記憶體或者檔案建立對映關係

addr:要對映的虛擬記憶體位址, 如果為null作業系統會自動選擇乙個虛擬位址與物理記憶體對映。

length:要對映的位元組數

flags:對映標誌

prot: 許可權

fd:檔案描述符(與記憶體對映沒有關係)

offset:檔案對映偏移值

返回值:對映成功後的虛擬記憶體位址,失敗返回0xffffffff。

int munmap(void *addr, size_t length);

功能:取消對映

addr:需要取消對映的記憶體首位址

length:需要取消對映的位元組數

返回值:成功0,失敗-1

Linux記憶體管理 函式詳解

0.11核提供的記憶體管理函式大部分在memery.c中,我將其中的函式從功能上分為三類 記憶體的分配與釋放 頁異常處理和記憶體初始化。第一類主 要包括單個物理頁的操作和頁表的操作,單個物理頁的操作就是乙個物理頁的申請 對映和釋放 頁表操作主要是多個頁表的釋放 複製。第二類主要是處理缺頁異 常和寫保...

linux記憶體管理之記憶體分配函式區別

使用者 核心 api名稱 物理連續?大小限制 單位場景 使用者空間 malloc calloc realloc free 不保證堆申請 位元組calloc初始化為0 realloc改變記憶體大小。alloca 棧申請位元組 向棧申請記憶體 mmap munmap 將檔案利用虛擬記憶體技術對映到記憶體...

linux記憶體管理之記憶體分配函式區別

使用者 核心 api名稱 物理連續?大小限制 單位場景 使用者空間 malloc calloc realloc free 不保證堆申請 位元組calloc初始化為0 realloc改變記憶體大小。alloca 棧申請位元組 向棧申請記憶體 mmap munmap 將檔案利用虛擬記憶體技術對映到記憶體...