例如,我有一个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 * ...
估计会更接近
您可以使用Curtis Bartley的MemTrack。它是一种内存分配器,它取代了默认的内存分配器,并且可以跟踪内存使用情况直至分配类型。
如果您真的想知道运行时的内存占用量,请在创建映射时使用自定义分配器并将其传递。请参阅Josuttis的书和其this页(用于自定义分配器)。
[我最近需要自己回答这个问题,并使用我在64位模式下在MSVC 2012下编译的std :: map编写了一个小型基准程序。
公式更像是:
我也在寻找某种方法来计算std::map
的大小。我尝试了Diomidis Spinellis答案中解释的内容,并在此扩展了他的答案,这可能对其他人有帮助。
地图的大小实际上取决于地图的实现。您可能在不同的编译器/平台上使用不同的大小,具体取决于它们提供的STL实现。