Lecture14.pdf

The heap so far

Running a program 运行程序的过程

image.png

What is a heap allocator?

image.png
image.png
image.png
image.png
image.png

Heap allocator requirements and goals

image.png
image.png
image.png
image.png
image.png
堆内存分配是对齐8的。

Maximize throughput 最大吞吐量 和 Maximize memory utilization 最大内存利用率

image.png
image.png
通常我们希望使用的最大地址尽可能地低。
image.png
image.png
image.png
image.png

Method 0: Bump Allocator

image.png
image.png
image.png
image.png

Method 1: Implicit Free List Allocator 隐式空闲链表分配器

image.png

详细例子参考pdf52-60页。
image.png
image.png
image.png
image.png
image.png
image.png

Final Project: Implicit Allocator

image.png

Coalescing 堆碎片内存聚合

image.png

In-Place Realloc 就地重分配

image.png
如上图的就不是就地重分配。
image.png

Method 2: Explicit Free List Allocator 显式空闲链表分配器

Explicit Allocator

image.png
上图这种方法是低效的。
image.png
image.png
image.png
image.png

Explicit Free List: List Design

image.png
image.png
image.png

Coalescing

image.png
image.png

In-place realloc

image.png

padding

padding是指为了使分配的内存对齐8,对一些数据类型需要多分配一些内存来凑齐8的倍数,多分配的这部分内存叫做padding(填充)。
image.png
image.png

image.png
image.png

Going beyond: Explicit list w/size buckets

image.png

Final Project: Explicit Allocator

image.png
image.png

Live Session Slides

image.png
image.png

In the wild: glibc allocator

image.png
https://sourceware.org/glibc/wiki/MallocInternals

Practices

几个加深理解的小练习,可以从pdf的127页看起。