我正在阅读有关编写用于c ++程序的内存管理工具的教程。这是本教程的link。
此内存管理器的一种变体是位图内存管理器,其中的优化基于预取大块内存并稍后在程序中使用它的想法。该块进一步分为较小的固定大小的单位,称为块,用于分配特定类型的对象。]
本教程明确提到,“所有空闲块的相应位都设置为1。被占用的块的位都重置为0。”
与每个块相关联的位图代表了上述想法。但是,在BitMap类的实现中,每个块的每个对应位都由32位整数表示,而不仅仅是一个布尔值。这是我无法理解的。
[此外,以下是上述类的声明。您可以在本教程的清单12中看到这一点。我也认为与memset的行是不正确的。初始化未完成,即使我们继续进行,初始化也应为BIT_MAP_SIZE * 4。
typedef struct BitMapEntry
{
int Index;
int BlocksAvailable;
int BitMap[BIT_MAP_SIZE];
public:
BitMapEntry(): BlocksAvailable(BIT_MAP_SIZE)
{
memset(BitMap, 0xff, BIT_MAP_SIZE / sizeof(char));
// initially all blocks are free and bit value 1 in the map denotes
// available block
}
void SetBit(int position, bool flag);
void SetMultipleBits(int position, bool flag, int count);
void SetRangeOfInt(int* element, int msb, int lsb, bool flag);
Complex* FirstFreeBlock(size_t size);
Complex* ComplexObjectAddress(int pos);
void* Head();
}
BitMapEntry;
我正在阅读有关编写用于c ++程序的内存管理工具的教程。这是本教程的链接。此内存管理器的一种变体是位图内存管理器,其中...
初始化似乎不正确,但是选择“位容器”类型为int
不一定无效。