下面的代码似乎并不遵循glibc的首次拟合算法。我不知道这种差异是从哪里出来的,只是猜测不同的 ubuntu 版本或 glibc。我使用的是Linux Ubuntu 19.04和glibc 2.29。(glibc_2.29-0乌班图2)
我尝试编译此代码:https://github.com/shellphish/how2heap/blob/master/first_fit.c
结果是:
第一名(512):0x55e9722a9260
第二名(256):0x55e9722a9470
第三名(500):0x55e9722a9580
据我所知,应该0x55E9722A9260 3rd malloc ptr ..
glibc - 包含malloc
和大多数其他标准C库函数 - 是一个非常复杂和不断发展的软件。 您的问题(以及此处的答案)最终取决于 glibc 的四个潜在不同版本:
- https://github.com/shellphish/how2heap/blob/master/first_fit.c 作者正在使用的glibc的精确版本
- 编译和运行测试程序时实际使用的 glibc 编译版本
- 这里的各种回答者正在咨询的glibc源的版本 记录在
- 任何人在回答此问题时咨询的任何文档中的 glibc 版本
现在,是的,在一个理想的世界中,我们使用的每个软件的每个版本都有一个精确而明确的版本号,所有文档都将是完全最新的,并且会准确地描述它所标记的软件的确切版本的各个方面(甚至是那些在文档发布前一周更改的方面)。
但在现实世界中,不知何故,在某个地方,我提到的四个项目符号版本的glibc之间存在不匹配的可能性,这种不匹配最终会影响你提出的问题,很容易100%。
malloc 绝对不能保证它如何分发内存。如果你需要一个特定的算法,你应该编写自己的算法或找到一个并修改它。写一个简单的malloc并不难。很难写出适用于小块、大块、长寿命和短寿命块等的高性能!