一文读懂Linux内存分配策略
原文中文,约4900字,阅读约需12分钟。
📝
内容提要
本文以问答形式深入探讨了Linux内存系统的分配策略,包括虚拟地址空间的划分和用户空间内存的动态分配方式。malloc函数通过brk和mmap系统调用分配内存,其中brk方式不会归还内存给操作系统,而mmap方式会归还。预分配内存池可以减少系统调用和缺页中断的次数。
❓
Q&A
Linux内存系统是如何划分的?
Linux内存系统分为内核空间和用户空间,32位系统内核占1G,64位系统内核和用户空间各占128T。
malloc函数是如何分配内存的?
malloc函数通过brk和mmap系统调用分配内存,brk用于小于128KB的内存分配,mmap用于大于128KB的内存分配。
使用brk和mmap的内存分配有什么区别?
brk分配的内存不会归还给操作系统,而mmap分配的内存会在释放时归还。
malloc分配的虚拟内存会占用物理内存吗?
不会,malloc分配的虚拟内存未被访问时不会映射到物理内存。
为什么malloc会预分配内存池?
预分配内存池可以减少系统调用和缺页中断的次数,从而提高性能。
free函数释放内存时会归还给操作系统吗?
通过brk分配的内存不会归还,而通过mmap分配的内存会归还给操作系统。
🏷️