在STL源码中的第2级空间配置器有一个联合定义如下:
union obj { union obj* free_list_link; char client_data[1]; };
在侯大师的详细解释下,我总算对STL的空间配置器有一个总体印象。但对以上这个联合体的设计方式始终不得其所,client_data[1]这个数组,在空间分配中根本没有使用到嘛!它的设计初衷是什么呢?
经过查询资料,得出以下粗浅的理解:首先作者使用联合体这个结构体的目的应该是充分利用内存,若使用结构体,占用的内存肯定更大。然后,为何有client_data[1]这个数组定义,看STL源码,在内存分配过程中,即在空间配置函数allocate()中调用的函数refill()里面,只应用到了free_list_link这个指针,这个指针的作用是链接内存块(1字节-16字节),当free_list链表中的内存块返回给用户(动态申请)时,free_list_link这个指针将被遗弃(即时在内存块的前4个字节(就是该内存块的free_list_link内容)存有下一个内存块的地址)。而client_data[1]这个数组到底有何作用,其实该数组是定义一个柔性数组。不是内存块的大小(1字节-16字节)吗&