tensorflow基于Doug Lea的malloc实现了自己的一套内存分配器.(简易版本的dlmalloc)通过合并的方式减少内存碎片.前提是假设使用这个分配器的进程拥有很大的内存,并且所有的内存分配请求都是通过这个接口.
代码路径:
core/common_runtime/bfc_allocator.h
关键数据结构以及变量含义:
Chunk:指向一块内存,prev/next指针组成了一个双向链表,按照地址排序并且基地址保持连续.包含当前块是否在使用或者空闲的信息,并且还包括一个指针指向所属的bin.
Bin:一个集合,包含相似大小的空闲Chunk.所有在bin中的Chunk大小均应该大于等于bin_size.按照大小排序(大小首先按照大小,其次按照首地址)
AllocationRegion:映射一个指针,指向ChunkHandles(一段连续的内存区域).
RegionManager:管理一个或多个AllocationRegions.提供一个指针与ChunkHandle之间的中间层,支持跨多个不连续的memory region分配.
同样存在split操作,就是将chunk一分为二,空余的那部分重新放入到合适的bin里面.
Merge操作,只能merge空闲的chunk,
Visitor:
VisitableAllocator:当一个内存分配器需要支持某些内存区域的注册/注销操作时,使用这个子类.注册一个visitor保证当前设备中新分配的每个内存块只会被调用一次.