之前写代码的时候一直有个疑问,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时不必传入空间的大小,因为可以计算出来。

最新文章

  1. 拼图小游戏之计算后样式与CSS动画的冲突
  2. [占位-未完成]scikit-learn一般实例之十二:用于RBF核的显式特征映射逼近
  3. C#接口知识大全收藏
  4. ArcBruTile 0.2.2
  5. 项目部署之VPN+端口映射
  6. 如何在Fedora 22上面配置Apache的Docker容器
  7. js数组的管理[增,删,改,查]
  8. 重大发现Android studio 如何简单快速修改package name
  9. Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇
  10. POJ 1014 Dividing 多重背包
  11. <frameset><frame><iframe>网页框架
  12. sql server 2000 下载地址
  13. Yii在nginx下多目录rewrite
  14. The Standard Librarian: I/O and Function Objects: Containers of Pointers
  15. nginx源码分析——线程池
  16. 使用COOKIE实现登录 VS 使用SESSION实现登录
  17. Java并发编程(三)-- 多线程的“问题”
  18. js 异步请求
  19. [UE4]Set Skeletal Mesh,在蓝图中设置骨骼模型
  20. Python的多态、继承与封装

热门文章

  1. 理解bleu
  2. window 64bit 下react navtive安装
  3. 【MongoDB】MongoDB的java驱动包使用
  4. Eclipse中创建Maven多模块工程
  5. span的赋值与取值
  6. MySQL中模拟oracle中的rownum列
  7. Java NIO.2 —— 文件或目录删除操作
  8. Python 文件 fileno() 方法
  9. github 仓库共享上传权限
  10. javaScript的变量