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