【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
文章目錄
- 一、堆內(nèi)存管理
- 二、內(nèi)存描述符 mm_struct 結(jié)構(gòu)體
- 三、mm_struct 結(jié)構(gòu)體中的 start_brk、brk 成員
一、堆內(nèi)存管理
Linux 操作系統(tǒng)中的 " 堆內(nèi)存 “ 是通過 malloc 等函數(shù) ” 動態(tài)分配 " 的 內(nèi)存區(qū)域 ;
" 堆內(nèi)存 “ 是 ” 連續(xù)的 “ 內(nèi)存區(qū)域 , 其 " 生長方向 " 是 ” 自下而上 " 生長 ;
" 堆內(nèi)存 " 的管理 由 Linux 內(nèi)核實現(xiàn) , 開發(fā)者 不知道 堆的管理細(xì)節(jié) , 只通過 " 系統(tǒng)調(diào)用 " 調(diào)用相關(guān)函數(shù) ;
" brk 系統(tǒng)調(diào)用 " 負(fù)責(zé) 擴(kuò)展 和 收縮 堆內(nèi)存 ;
在 " 內(nèi)存描述符結(jié)構(gòu)體 " mm_struct 結(jié)構(gòu)體中 ,
start_brk 是 " 堆內(nèi)存 “ 在 ” 虛擬地址空間 " 中的 起始地址 ,
brk 是 " 堆內(nèi)存 " 在 " 虛擬地址空間 " 中的 結(jié)束地址 ,
二、內(nèi)存描述符 mm_struct 結(jié)構(gòu)體
mm_struct 結(jié)構(gòu)體 定義在 Linux 內(nèi)核源碼 include\linux\mm_types.h#375 源碼中 ;
mm_struct 結(jié)構(gòu)體 源碼 :
struct mm_struct {struct {struct vm_area_struct *mmap; /* list of VMAs */struct rb_root mm_rb;u64 vmacache_seqnum; /* per-thread vmacache */// ...unsigned long hiwater_rss; /* High-watermark of RSS usage */unsigned long hiwater_vm; /* High-water virtual memory usage */unsigned long total_vm; /* Total pages mapped */unsigned long locked_vm; /* Pages that have PG_mlocked set */atomic64_t pinned_vm; /* Refcount permanently increased */unsigned long data_vm; /* VM_WRITE & ~VM_SHARED & ~VM_STACK */unsigned long exec_vm; /* VM_EXEC & ~VM_WRITE & ~VM_STACK */unsigned long stack_vm; /* VM_STACK */unsigned long def_flags;spinlock_t arg_lock; /* protect the below fields */unsigned long start_code, end_code, start_data, end_data;unsigned long start_brk, brk, start_stack;unsigned long arg_start, arg_end, env_start, env_end;unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */// ...} __randomize_layout;/** The mm_cpumask needs to be at the end of mm_struct, because it* is dynamically sized based on nr_cpu_ids.*/unsigned long cpu_bitmap[]; };源碼路徑 : linux-5.6.18\include\linux\mm_types.h#375
三、mm_struct 結(jié)構(gòu)體中的 start_brk、brk 成員
mm_struct 結(jié)構(gòu)體中的 start_brk、brk 成員 , 分別是 " 堆內(nèi)存 " 在 " 虛擬地址空間 " 的 開始 和 結(jié)束 地址 , 其定義在 Linux 內(nèi)核源碼的 linux-5.6.18\include\linux\mm_types.h#456 源碼中 ;
unsigned long start_brk, brk, start_stack;源碼路徑 : linux-5.6.18\include\linux\mm_types.h#456
總結(jié)
以上是生活随笔為你收集整理的【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核 内存管理】Linux
- 下一篇: 【Linux 内核 内存管理】Linux