1. 虚拟内存
    1. 内存分段
    2. 内存分页
      1. 多级页表
      2. TLB
    3. 段页式内存管理
    4. Linux内存管理
  2. malloc与free
    1. malloc 是如何分配内存的?
      1. 方式一:通过 brk() 系统调用从堆分配内存
      2. 方式二:通过 mmap() 系统调用在文件映射区域分配内存;
    2. malloc()分配的是虚拟内存。
    3. malloc(1) 会分配多大的虚拟内存?
      1. 会预分配更大的空间作为内存池。
      2. 具体会预分配多大的空间,跟 malloc 使用的内存管理器有关系。
    4. free 释放内存,会归还给操作系统吗?
      1. malloc 通过 brk() 方式申请的内存,free 释放内存的时候,并不会把内存归还给操作系统,而是缓存在 malloc 的内存池中,待下次使用;
      2. malloc 通过 mmap() 方式申请的内存,free 释放内存的时候,会把内存归还给操作系统,内存得到真正的释放。
    5. 为什么不全部使用 mmap 来分配内存?频繁通过 mmap 分配的内存话,不仅每次都会发生运行态的切换,还会发生缺页中断(在第一次访问虚拟地址后),这样会导致 CPU 消耗较大。
    6. 为什么不全部使用 brk 来分配? malloc 返回给用户态的内存起始地址比进程的堆空间起始地址多了 16 字节,保存了该内存块的描述信息,比如有该内存块的大小。
  3. 内存管理器free() 函数只传入一个内存地址,为什么能知道要释放多大的内存?
  • Ptmalloc2
  1. 内存满了,会发生什么?
  2. 在 4GB 物理内存的机器上,申请 8G 内存会怎么样?