malloc()是c语言中用于动态分配内存的核心函数。
一、核心实现机制
malloc的实现依赖操作系统提供的内存管理机制,主要通过两种系统调用获取内存:
1.brk/sbrk---小内存分配
通过brk系统调用调整进程数据段heap的边界 sbrk(n)会将堆顶指针向上移动n字节 返回旧的堆顶指针作为分配内存的起始点
特点:小内存分配---通常小于128KB 分配内存位于堆区 释放后需等待相邻内存块全部释放才能归还给操作系统
2.mmap---大内存分配
通过mmap系统调用向操作系统申请一段虚拟内存空间 映射到物理内存或者是磁盘交换区
特点:大内存分配---通常大于128KB 分配内存独立于堆区 通过私有匿名映射方式 从文件映射区分配一段内存 释放后立即归还给操作系统
malloc()分配的是虚拟内存,分配的虚拟内存没有被访问的时候,虚拟内存不会映射到物理内存,这样不会占用物理内存

3万+

被折叠的 条评论
为什么被折叠?



