在MCD第四章<小型对象分配技术>里有关chunk讲解的部分中有几个问题,现在拿出来问问大家:
1、在P82中的关于Init的那段代码中,blocks的型别是unsigned char,它的代表的意义是在chunk中分配区块的数量,那我想问这个blocks,是如何赋值?blocks=(unsigned char)n//n是整型,这样赋值可以吗?
2、代码中的size_t,到底是什么型别?好象在泛型中还有size_type,这个又是什么意思?
最后一个问题,书中讲到之所以firstAvailableBlock(chunk中第一个可用区块的索引号)和blocksAvaiable是unsigned char型别,书中说到如果将unsigned char换成unsigned short的话,“我们就无法分配小于sizeof(unsigned short)的区块”,我实在是理解不了这句话。我认为上面的两个参数(其实也就是blocksAvaiable该参数决定区块总数)仅仅可以限制chunk中区块的数量,而和每一个区块中的大小没有什么影响。我认为是我的理解有问题,所以请大家给个讲解,谢谢
该设计使用了“未用块”的第一个字节来保存了一个长度信息。很明显,如果可以分配小于sizeof(unsigned short)的区块,必然会出现长度小于sizeof(unsigned short)的区块,而长度信息又用unsigned short表示,那么这个长度信息又如何保存在这个。
1.这些只是书中的例子,实际中我认为这种细节不用考虑那么多,自己明白怎么回事就行。
2.pass
3.你还是没有完全明白。有索引号的只是未分配的区块,未分配的区块通过索引号组成一个链表。而对于已分配的区块,整个区块空间都是可以被使用的。因此索引号完全不影响已分配区块空间的使用,在这个意义上说,用来存放索引的sizeof(unsigned char)个字节不算是额外空间。