【C/C++语言】malloc的使用和底层原理_哔哩哔哩_bilibili
malloc是比较常用的动态内存分配的指令,其接受所需的内存大小并返回分配地址的首地址(void*类型),用指针变量接受。
基本用法如下;
int *arr = (int*)malloc(10*sizeof(int));
if(arr == NULL)
{
//分配失败
}
else
{
//分配完毕,可以使用
for(int i = 0; i < 10; i++)
{
arr[i]=i;
}
//最后释放空间
free(arr);
}
其分配的内存位于堆区,使用完毕后必须手动使用free释放内存。在要求操作系统分配内存时,实际发生如下操作:
首先判断malloc要求的内存大小,一般默认阈值为128KB。
- 当要求的内存小于阈值时,在堆区寻找和开辟空间,首先在空闲链表中寻找是否有合适的内存块,若有则根据不同策略分配或者切割内存块。若空闲链表中无合适内存块,则通过系统调用brk()去调整program break指针扩增堆区空间。
- 当要求的内存大小大于阈值时,采用mmap()系统调用在文件映射区映射创建匿名映射(文件映射区主要存放该进程相关联的文件),并在使用完毕时通过munmap()系统调用直接将创建的匿名映射销毁,将内存归还给OS。
(这里对1中的内容进行补充说明:其中堆区的空间组织基本结构时chunk内存块,已分配的内存块独立存在
malloc动态内存分配原理解析

最低0.47元/天 解锁文章
592

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



