Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于MMGR的问题_C++_Memory Leaks_Thread Safety_Memory Management - Fatal编程技术网

C++ 关于MMGR的问题

C++ 关于MMGR的问题,c++,memory-leaks,thread-safety,memory-management,C++,Memory Leaks,Thread Safety,Memory Management,我一直在查看内存分配检查器的MMGR,我有一些问题在internet上其他任何地方都看不到 1) 有“报告尺寸”和“实际尺寸”。我理解“报告的大小”是什么,它是新收到的大小,然而,“实际大小”是什么?为什么会有区别 2) 伐木是完全安全的吗?我看到日志记录发生在一个类的静态释放结束时,但是,这会给出内存泄漏的误报吗? 2A)可以肯定的是,静态交易总是最后发生,对吗 3) 这段代码是线程安全的吗?如果不是,它如何成为线程安全的 恐怕我没有MMGR方面的经验,所以我只能回答您的第一个问题 一些内存调

我一直在查看内存分配检查器的MMGR,我有一些问题在internet上其他任何地方都看不到

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

2) 伐木是完全安全的吗?我看到日志记录发生在一个类的静态释放结束时,但是,这会给出内存泄漏的误报吗? 2A)可以肯定的是,静态交易总是最后发生,对吗


3) 这段代码是线程安全的吗?如果不是,它如何成为线程安全的

恐怕我没有MMGR方面的经验,所以我只能回答您的第一个问题

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

  • 对齐问题:我认为在现代32位(或更多)系统上,没有一个分配器可以精确分配3个字节。根据体系结构,该值将至少四舍五入到单词大小的下一个倍数或4

  • 管理问题:一些分配器将只处理大小为二次幂的分配。所以得到的块是4、8、16、32、64、128、256等字节。这在用户空间分配器中很少见,但在内核空间分配器中很常见

  • 普罗维登斯:一些分配者每次都会分配多一点,以期待可能的重新分配

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