是否可以通过'new'分配内存块大小?

时间:2011-04-30 14:13:20

标签: c++ windows winapi memory-management c++builder

你好我需要记录我的堆,但现在我只想用我的函数重载'new'运算符。

我需要总结在malloc()或Heap *()或其他windows mem *函数之后增加的内存的实际计数字节

但是现在我需要分析当前的堆实现。是否有可能获得像HeapAlloc()函数分配的块大小 - HeapSize()?

2 个答案:

答案 0 :(得分:0)

我可以看到你没有搜索文档。

HeapSize() exists.


修改在反思中,您可能要求{{1>} 替代,以便在使用HeapSize()自行执行分配时可以使用替代

答案是否定的。标准分配例程没有任何东西可以获取有关内存块的信息,因为:

  • 这是高度依赖于实现的,
  • 您已经知道了块大小(因为您首先指定了它),那么膨胀的重点是什么?

事实上,new 是Windows的依赖于实现的函数,但是只能在执行HeapSize()时使用它。

HeapAlloc()和朋友可以使用[也是非标准] _msize,但malloc 可能不会使用new

因此,我建议您只在自己的分配器中跟踪尺寸。

答案 1 :(得分:0)

_msize

根据文档,它适用于 calloc,malloc和realloc

但是,至少在Visual Studio下,使用默认分配器,它也适用于 new

使用它并不是一个好主意,但是,它可能会为分析工作。

还有一件事:

VMMap等外部工具可能有助于此类分析。