下面的代码似乎没有遵循glibc的首选算法。我不知道这种差异在哪里出现,只是猜测它是不同的ubuntu版本还是glibc。我正在使用Linux Ubuntu 19.04和glibc 2.29。 (glibc_2.29-0ubuntu2)
我尝试编译以下代码:https://github.com/shellphish/how2heap/blob/master/first_fit.c
结果是:
第一个malloc(512):0x55e9722a9260
第二个malloc(256):0x55e9722a9470
第3个malloc(500):0x55e9722a9580
据我所知,第三个malloc ptr应该为0x55E9722A9260 ..
答案 0 :(得分:0)
glibc(包含malloc
和大多数其他Standard C库函数)是一款非常复杂且不断发展的软件。您的问题(以及此处的答案)最终取决于glibc的四个不同版本:
现在,是的,在理想的世界中,我们使用过的每个软件的每个版本都将带有准确无误的版本号,并且所有文档都将是最新的,并且可以准确地描述每个方面标有该软件的确切版本的信息(甚至是在发布文档一周之前发生的那些方面)。
但是在现实世界中,我提到的glibc的四个项目符号版本之间某种程度上不匹配的可能性很容易100%出现,最终导致影响您提出的问题。
答案 1 :(得分:-1)
malloc不能保证绝对会如何分发内存。如果需要特定的算法,则应编写自己的算法或查找并修改它。编写简单的malloc并不难。 很难编写出适用于小块,大块,长寿命和短寿命块等的高性能代码!