一.Linux的Page Cache
page cache,又称pcache,其中文名称为页高速缓冲存储器,简称页高缓。page cache的大小为一页,通常为4K。在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。
二.Linux内存泄漏
内存泄漏一般指的是堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、使用完后必须显示的释放的内存。应用程序一般使用malloc、realloc、new 等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用 free 或 delete 释放该内存块。否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
三.Linux内核MMU
MMU是 MemoryManagementUnit 的缩写即,内存管理单元. 针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址与物理地址的转换. 提供硬件机制的内存访问授权。
四.应用程序的内存布局
代码段:对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)。
数据段:显式初始化为非0的全局变量,显式初始化为非0的static局部变量。
bss段存:显式初始化为0或者未显式初始化的全局变量,显式初始化为0或未显式初始化的static局部变量。
堆:C语言中什么样变量存在堆内存中?C语言不会自动向堆中存放东西,堆的操作是程序员自己手工操作的。程序员根据需求自己判断要不要使用堆内存,用的时候自己申请,自己使用,完了自己释放。
文件映射区:文件映射区就是进程打开了文件后,将这个文件的内容从硬盘读到进程的文件映射区,以后就直接在内存中操作这个文件,读写完了后在保存时再将内存中的文件写到硬盘中去
栈:栈内存区,局部变量分配在栈上;函数调用传参过程也会用到栈,递归函数运行也在栈上
内核映射区:内核映射区就是将操作系统内核程序映射到这个区域了。
五.从内核角度看内存管理