内存管理:malloc入口和关键数据结构 前文已经介绍了堆管理的背景知识还有相关算法:虚拟地址空间和堆隐式空闲链表显式空闲链表 从本文开始来分析一下glibc的malloc实现,其中所列的代码都经过精简和修改,现在glibc的最新版本是2.33(https://www.gnu.org/software/libc/),实际的代码太多,不能全部列出,只能尽量简化 一、函数入口 直接在glibc种查找malloc函数的话是找不到的,因为malloc只是一个别名,真正的实现函数名是__libc_malloc: 其中strong_alias是一个宏: __typeof是GNU C(它是标准C的扩展,不严格的说,像ANSI C、ISO C、Standard C、C89、C99都是标准C以不同时期和角度的叫法)中的特性,作用和C++11新出现的decltype有点像,更多细节可以参考GCC10.1的这部分文档:https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes __attribute__是一个编译属性,它也是GNU C特色之一,用于向编译器描述特殊的标识、错误检查或高级优化。它可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute),上面代码设置的是变量属性(设置变量属性细节可参考GCC10.1的文档:https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes),语法格式为: 二、malloc_chunk数据结构 malloc中用到的chunk数据结构名称是malloc_chunk,这个数据结构非常重要,是malloc管理堆的基本数据结构,具体定义为: 字段的注释大概说明了这个字段的含义,后面再用图示的方法来详细说下这个数据结构。 三、free chunk 把上面malloc_chunk数据结构直接图形化,结果就是free chunk的示意图,关于allocated chunk,后面会再讲到,这里先展示free chunk:




2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/56295.html