内存管理子系统学习记录
内存管理子系统学习记录
1、从进程的角度看内存管理
代码段:进程内存中用于存储程序可执行代码的部分。它包含了程序的指令和函数。其特点包括只读:通常不允许修改代码段的内容。共享:多个进程可以共享同一个代码段,减少内存占用
数据段:进程内存中用于存储全局变量和静态变量的部分。这些变量在程序的整个生命周期内都存在。
堆:进程内存中用于动态内存分配的部分。大小和数量在程序运行时确定,由 malloc、calloc、realloc 等函数管理。通常从低地址向高地址增长。
栈:进程内存中用于存储函数调用和局部变量的部分。栈的空间是自动分配的,局部变量在函数调用时自动分配栈内存,实现变量的压栈,在函数返回时自动释放。由编译器自动管理。通常从高地址向低地址增长。
BSS段:进程内存中用于存储未初始化的全局变量和静态变量的部分,与数据段不同,BSS 段在程序启动时并不占用实际的物理内存,直到变量被访问时才会分配内存。
内核使用伙伴系统(buddy system)机制管理物理内存的分配,注意是物理内存!!!!!!!
Linux会将2的order次幂个内存页合成一个内存块,order的最大值为11。也就是Linux会将内存划分为11种不同大小的内存块:分别是含有20,21,22…210个内存页