此处的Array指的是Map
第一种方式是基于互相独立的内存块(block),每个内存块被分配时确定其序号以及长度。指针无法越过内存块的边界访问其他内存地址。
在顶层为三个数组用于记录内存块的信息:
- len: len[i]代表第i个内存块的长度
- valid: 同理,表示是否已经被分配
- content: 指向数组的数组 (Z → (Z → Z))
指针由两个整型变量建模:base和offset。base是指向的内存块的序号,offset是内存块内偏移。内存块被分配时,返回的指针偏移量为0。
第二种方式是用一个长数组表示整个堆内存,只分配地址更高的内存区域。
- start: start[i]是第i次分配的地址区域起始
- end: 同理
- top: 整型,当前最低的未被分配内存地址