在数值较小的地址区域上,有一块区域被称为 Heap Segment,这里存着当前运行过程中动态分配的内存空间。这里的 Heap 与数据结构中的 Priority Queue 并无任何关系,在这里它仅仅指的是一个数据块,而这个数据块的分配与回收,是由软件直接控制的,该软件被称为 Heap Manager。当 malloc 被调用时,Heap Manager 会在 Heap Segment 中找到一块符合要求的内存空间,将它分配出去并记录,然后把该空间的起始地址返回给调用者;当 realloc 被调用时,Heap Manager 会首先检查该传入的地址是否被分配了空间,如果没有则调用 malloc,如果有则检查原先分配的空间是否满足 realloc 参数中指定的大小,如果满足,就直接返回;如果不满足,则首先检查原先分配的空间之后是否有足够的空闲空间满足,如果满足则直接分配所需的剩余空间,如果不满足则从 Heap Segment 中重新分配一块符合要求的空间,并将原分配空间中的数据拷贝到新的空间中,同时返回新空间的地址。