虚拟内存基础->测量内存的使用情况->检测内测分配
简单工具: free和top
复杂工具: mtrace和Valgrind
虚拟内存基础
Linux是通过CPU的内存管理单元提供的虚拟地址空间来运行程序的.32位处理器的最高地址是0xffffffff, 该地址被划分为多个4KB大小的页面.Linux将这个虚拟地址空间划分为用户空间和内核空间.两者由一个内核配置参数page_offset区分开.在一个典型的32位嵌入式系统中,PAGE_OFFSet设为0xc0000000,将底部的3GB分配给用户空间,将顶部的1GB分配给内核空间.每个进程分配一个用户地址空间,使得每个进程运行在相对独立的空间.内核地址空间对所有进程是相同的,因为只有一个内核.
虚拟地址空间的页面通过内存管理单元(MMU)映射到物理地址,它使用页表来实现映射.
内核空间内存布局:
内核内存在以kmalloc或相似函数分配内存时,是直接分配真正的物理内存.内核内存是不会被丢弃或被换出的.