关于MMGR的问题

时间:2011-07-03 19:06:39

标签: c++ memory-leaks thread-safety memory-management

我一直在看MMGR的内存分配检查器,我有几个问题,我在互联网上的任何其他地方都没有看到。

1)有“报告的大小”和“实际大小”。我理解“报告的尺寸”是什么,它是新收到的尺寸,然而,“实际尺寸”是多少?为什么会有区别?

2)记录是否完​​全安全?我看到日志记录发生在类的静态释放结束时,但是,这是否会导致内存泄漏误报? 2A)可以肯定的是,静态解除分配总是最后发生,对吗?

3)此代码线程是否安全?如果没有,它如何变得线程安全?

1 个答案:

答案 0 :(得分:0)

我担心我对MMGR没有任何经验,所以我只能为你的第一个问题提供答案。

一些内存调试器提到报告(或请求)和实际分配大小的原因与内存分配器的工作方式有关。他们很少精确地分配所要求的大小 - 通常他们保留更多。有各种可能的原因:

  • 对齐问题:我不认为有一个分配器会分配例如在现代32位(或更多)系统上正好是3个字节。该值将四舍五入为至少字大小的下一个倍数或4,具体取决于架构。

  • 管理问题:某些分配器只处理大小为2的权限。所以你得到4,8,16,32,64,128,256等字节的块。这在用户空间分配器中很少见,但在内核空间分配器中很常见。

  • Providence:有些分配器每次都会分配更多的东西,以期可能重新分配。

在任何情况下,保留的内存通常会比请求的数量多一些,因此存在两个数字。