free和list的意义已经很清楚明了了,现在来解释下slobidx_t units这个玩意。unit是slob的粒度,也就是说当你分配内存时,必须分配出去N个unit,所有的管理都是基于unit的。unit的大小根据PAGE_SIZE的不同而不同,通常情况下为2个字节,关于unit大小的定义:
#if PAGE_SIZE <= (32767 * 2) typedef s16 slobidx_t; #else typedef s32 slobidx_t; #endif
既然slob的管理是基于unit的,那么units字段的含义也就很容易理解了,它表示的是slob中当前还剩余的空闲单元数目。