是否可以获得'new'分配的内存块大小?

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

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

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

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

.

c++ windows winapi memory-management c++builder
2个回答
0
投票

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

HeapSize()
存在。


编辑 经过反思,也许您正在要求 HeapSize()

替代
,当您自己使用
new
执行分配时可以使用它。

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

  • 这高度依赖于实现,并且
  • 您已经知道块大小(因为您首先指定了它),那么膨胀的意义何在?

事实上

HeapSize()
是 Windows 执行此操作的依赖于实现的函数,但您只能在执行 HeapAlloc()
 时才能使用它。

有[也是非标准]

_msize

可以与
malloc
和朋友一起使用,但
new
可能无法使用malloc

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


0
投票

_msize

根据文档,它适用于

calloc、malloc 和 realloc

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

new

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

还有一件事:

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

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