美文网首页
malloc是如何分配内存的

malloc是如何分配内存的

作者: 彳亍口巴 | 来源:发表于2022-11-14 23:01 被阅读0次

Linux内存分布

如32位系统,下面的3G是用户空间,上面的1G是内核空间,每个虚拟内存中的内核地址,其实关联的都是相同的物理内存
Linux中内存分布,从地位到高位分别是程序文件、以初始化数据、未初始化数据、堆、文件映射、栈,内核空间,堆和内存映射区域少动态分配的,一般分配内存就是指在这两个区域分配

malloc是如何分配内存的(分配的是虚拟内存)

1、分配内存小于128KB的时候,通过brk() 函数将堆顶指针向高位移动,获得新的内存空间,通过brk函数分配的内存,释放掉后并不会立即归还给操作系统,而是放入内存池中,待下次使用,这样下次分配的时候就不需要进行系统调用,也不会触发缺页中断,这将大大减少CPU的消耗,但是这样会产生很多的小内存碎片,导致内存泄漏
2、分配内存大于128KB的时候,通过mmap函数,在文件映射区域偷了一块内存,通过mmap函数申请的内存,在free释放掉后,会立即将内存归还给操作系统,内存得到真正的释放,但是下次分配的时候,还是会进行系统调用,触发缺页中断,导致CPU的消耗过大,优点是不会出现内存碎片

malloc(1)会分配多大的内存?

不会只分配1字节,一般会分配多一点,可能睡132K字节的内存

free释放内存,会归还给操作系统吗?

相关文章

网友评论

      本文标题:malloc是如何分配内存的

      本文链接:https://www.haomeiwen.com/subject/ewyrxdtx.html