Linux源码分析之:malloc、free
2024-10-19 16:24:36
之前写代码的时候一直有个疑问,malloc申请内存的时候指定了内存大小,但是free的时候却只指定要释放的内存地址,那么free是如何知道它要释放的内存空间大小呢?
源码之前,了无秘密,下面就从源码来扒一扒。
由上图可知,malloc和free分别调用了malloc_internal和free_internal来实现具体的操作。
在malloc_internal中,最需要注意的一行就是计算需要分配空间的大小,可以看到,计算该空间时还加了一个sizeof(allocation_header),该结构体内部有两个成员:allocation_index、allocation_size。
此处的allocation_size是解答上面疑问的关键,它记录了调用malloc时分配的空间大小,再来看free_internal。
在free中,先是调用get_header获取到了调用malloc时分配的allocation_header,然后将该header作为参数传入free_internal中,因此调用free时不必传入空间的大小,因为可以计算出来。
最新文章
- 拼图小游戏之计算后样式与CSS动画的冲突
- [占位-未完成]scikit-learn一般实例之十二:用于RBF核的显式特征映射逼近
- C#接口知识大全收藏
- ArcBruTile 0.2.2
- 项目部署之VPN+端口映射
- 如何在Fedora 22上面配置Apache的Docker容器
- js数组的管理[增,删,改,查]
- 重大发现Android studio 如何简单快速修改package name
- Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇
- POJ 1014 Dividing 多重背包
- <;frameset>;<;frame>;<;iframe>;网页框架
- sql server 2000 下载地址
- Yii在nginx下多目录rewrite
- The Standard Librarian: I/O and Function Objects: Containers of Pointers
- nginx源码分析——线程池
- 使用COOKIE实现登录 VS 使用SESSION实现登录
- Java并发编程(三)-- 多线程的“问题”
- js 异步请求
- [UE4]Set Skeletal Mesh,在蓝图中设置骨骼模型
- Python的多态、继承与封装