| 发表于:2007-06-27 16:06:56 楼主 |
侯杰翻译的《c++设计新思维》里的loki库里的 chunk结构: struct chunk { void init(int blocksize, unsigned char blocks); void* allocate(int blocksize); void reset(int blocksize, unsigned char blocks); unsigned char* pdata_; unsigned char firstavailableblock_, blocksavailable_; }; void chunk::init(int blocksize, unsigned char blocks) { pdata_ = new unsigned char[blocksize * blocks]; zeromemory(pdata_, blocksize * blocks); firstavailableblock_ = 0; blocksavailable_ = blocks; unsigned char i = 0; unsigned char* p = pdata_; for (; i != blocks; p += blocksize) { *p = ++i; } } void* chunk::allocate(int blocksize) { if (!blocksavailable_) return 0; //这时候firstavailableblock_可是0啊,乘上任何数字还是0, 按书中说的 //firstavailableblock_存的是chunk内第一个可用块的索引号.我分配了250 //个单位,这时我想firstavailableblock_存的是251才对,可是这里是0?? unsigned char* presult = pdata_ + (firstavailableblock_ * blocksize); firstavailableblock_ = *presult; --blocksavailable_; return presult; } int _tmain(int argc, _tchar* argv[]) { chunk onechunk; onechunk.init(16, 255); onechunk.allocate(250); onechunk.allocate(8); getchar(); return 0; } |
|
|
|
|