请你说说malloc内存管理原理:这里简谈下malloc的思路,最后放一些参考资料。(1)程序运行的时候会产生堆(stack)区和栈(heap)区,还有一个是文件映射区(Memory Mapping Region--mmap),malloc就是处理heap和mmap。(2)既然分为两部分,代表两种不同的场景,鉴于此,专门有对应的函数进行处理,brk()、sbrk()是增加heap的上界brk;mmap()和munmap()管理mmap区(3)C库进一步封装,对外提供malloc和alloc等函数,这就是为什么这些函数名都不知道,因为malloc进行了封装(4)当申请的内存小于128KB,malloc调用sbrk(),sbrk()是C库函数,进一步调用系统调用brk()(5)当申请的内存大于128KB。 malloc调用mmap ()为什么要再度封装,提供malloc等函数呢? brk()、sbrk()、mmap()和munmap()属于底层调用,如果频繁的调用会严重影响系统的性能。所以由glic帮助程序员管理内存,以内存池为基础的内存分配与回收,即使使用free后,内存也不会立即返回给系统,而是在glic中的内存池里,方便用户的下一次请求。 最后分享下资料,网上大部分关于malloc的底层原理都出自一人的文档,淘宝的--glibc内存管理ptmalloc源代码分析.pdf,原始文档 https://gitee.com/ve2102388688/pdf http://luodw.cc/2016/02/17/malloc/ https://www.cnblogs.com/mysky007/p/12349508.html
2

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务