2011-04-30 70 views
3

你好,我需要记录我的堆,但现在我只是想用我的函数重载'新'操作符。是否有可能获得由'new'分配的内存块大小?

我需要总结这是malloc的后增大了其内存实数字节()或堆*()或其他窗口MEM *函数

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

+2

你知道块有多大,因为你首先要求一定的尺寸。 – 2011-04-30 14:16:34

+0

是的,那是我现在正在开发 – Sergey 2011-04-30 14:25:02

+0

...尽管分配器可能会返回比您要求的块更大的块,但我不知道是否有任何方法可以检测到该块。 – 2011-04-30 16:59:24

回答

0

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

HeapSize() exists.


编辑在反思,或许你问一个替代HeapSize(),你可以用,当你自己与new进行分配。

答案是否定的。该标准分配例程没有什么抢有关内存块的信息,这是因为:

  • 这是高度依赖于实现,并且
  • 你已经知道块大小(因为你首先规定它),那么膨胀点会是什么?

其实HeapSize()为Windows实现相关的功能做这个,但是当你执行HeapAlloc()你只能使用它。

有[还非标准] _msize可以与malloc和朋友使用,但new不得使用malloc

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

+0

new可以通过使用HeapAlloc() – Sergey 2011-04-30 14:25:52

0

_msize

根据它的工作原理为释放calloc,malloc和realloc的的文档。

但是,至少在Visual Studio中,使用默认分配器,它也适用于新的

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

一件事:

外部工具如VMMap可能有助于这种分析。

+1

'new'的其他插入方式真正分配new'可能不总是使用'malloc'。 – 2011-04-30 14:27:37

相关问题