自定义静态分配器是否可行? /一种伪造的方法吗?

时间:2017-03-15 15:10:01

标签: c++ memory memory-management

背景 出于硬件原因,我需要分配使用DOS Protected Mode Interface的内存,以便与某些低级接口(例如VESA BIOS Extensions)进行通信。

情况: 所以我可以为动态分配的内存重载newdelete,这很好,但我真的想为静态分配的内存重载分配器。我正在研究的项目是相当古老的库,因此需要相当数量的静态全局变量。

问题: 有没有什么方法可以重载这些变量的分配过程?如果没有,是否有一个模板可以动态分配这些不需要显式分配或删除的变量,并且几乎完全透明?

1 个答案:

答案 0 :(得分:0)

可悲的是,没有关键字来指定您希望使用的内存分配类型,并且没有标准模板来强制堆分配。我能找到的最好的答案就是创建一个小的包装器类,它可以根据需要分配和删除内存,并为您提供对指针的访问。这没什么特别的,但这是我的一些代码。

template<typename T>
class mem
{
public:
  mem(void) { m_data = reinterpret_cast<T*>(dos::malloc(sizeof(T))); }
 ~mem(void) { dos::free(m_data); m_data = nullptr; }
  T* operator ->(void) noexcept { return m_data; }
  operator T*(void) noexcept { return m_data; }

private:
  T* m_data;
};