【发布时间】:2019-11-30 14:22:56
【问题描述】:
我正在阅读有关为 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++ memory-management