我如何估算std :: map的内存使用情况?

问题描述 投票:44回答:7

例如,我有一个std :: map,它的sizeof(A)和sizeof(B)已知,而map里面有N个条目。您如何估计其内存使用量?我会说像是>]

(sizeof(A) + sizeof(B)) * N * factor

但是因素是什么?也许使用不同的公式?

也许要求上限更容易?

例如,我有一个std :: map,它的sizeof(A)和sizeof(B)已知,而map里面有N个条目。您如何估计其内存使用量?我会说这有点像(sizeof(A)+ sizeof(B))* N * ...

c++ memory stl stdmap
7个回答
36
投票

估计会更接近


19
投票

您可以使用Curtis Bartley的MemTrack。它是一种内存分配器,它取代了默认的内存分配器,并且可以跟踪内存使用情况直至分配类型。


15
投票

如果您真的想知道运行时的内存占用量,请在创建映射时使用自定义分配器并将其传递。请参阅Josuttis的书和其this页(用于自定义分配器)。


7
投票

[我最近需要自己回答这个问题,并使用我在64位模式下在MSVC 2012下编译的std :: map编写了一个小型基准程序。


0
投票

公式更像是:


0
投票

我也在寻找某种方法来计算std::map的大小。我尝试了Diomidis Spinellis答案中解释的内容,并在此扩展了他的答案,这可能对其他人有帮助。


-1
投票

地图的大小实际上取决于地图的实现。您可能在不同的编译器/平台上使用不同的大小,具体取决于它们提供的STL实现。

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