位图内存管理器

问题描述 投票:0回答:1

我正在阅读有关编写用于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 ++程序的内存管理工具的教程。这是本教程的链接。此内存管理器的一种变体是位图内存管理器,其中...

c++ memory-management
1个回答
0
投票

初始化似乎不正确,但是选择“位容器”类型为int不一定无效。

© www.soinside.com 2019 - 2024. All rights reserved.