这节课主要是学习一些更复杂的技术,研究不同数据结构去存储 free list
我们要看implict allocators,因此我们会研究垃圾回收是怎么工作的。老师说一旦你开始了动态的分配存储,事情变坏的会很快。
Explicit Free Lists

这里说的我们维护的block不是一整块,而是自由分配那些free block,因此我们存储的是forward/back pointers,而不是仅仅的size,但是我们实际上还需要boundary tags去做聚合。
Allocating From Explicit Free Lists

Freeing With Explicit Free Lists

老师这里还讲到了一个开发的问题,说程序员应该先简单的开发,实现基本的功能,再逐渐考虑优化的事情,而不是一开始就premature的想好每个优化。
Freeing With a LIFO Policy (Case 1)

Freeing With a LIFO Policy (Case 3)

Freeing With a LIFO Policy (Case 4)

Explicit List Summary

Segregated free lists
Segregated List (Seglist) Allocators
原理就是每个不同的block size有自己的free list,每个block size的可能就是一个单例模式

Seglist Allocator

seglist是目前为止最好的分配器,因为它提供了性能吞吐量和内存利用的优化,

Garbage collection
Implicit Memory Management: Garbage Collection

由于指针的存在,对于C和C++来说垃圾回收器就是一种比较保守的,某些块永远不会被释放,因为分配器不能判断它们是否是真的垃圾,
Garbage Collection

Classical GC Algorithms

Memory as a Graph

Mark and Sweep Collecting

Assumptions For a Simple Implementation

Mark and Sweep (cont.)

Conservative Mark & Sweep in C

Memory-related perils and pitfalls
C operators

C Pointer Declarations: Test Yourself!

版权声明:本文为shendezhuti原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。