【问题标题】:Determine memory usage of an std::map/std::set at runtime在运行时确定 std::map/std::set 的内存使用情况
【发布时间】:2012-08-16 19:17:18
【问题描述】:

是否可以在运行时确定 std::map/std::set(固有数据类型)的实际内存使用情况?我做了一些内存研究,似乎这在很大程度上取决于 STL 实现和所使用的系统(由于底层结构的内存填充)。我想在运行时监控这些数据类型的内存使用情况,而不运行调试器/内存分析器。有没有办法做到这一点?

【问题讨论】:

  • 无论如何你都应该使用 STL 来存储指针
  • @BartekBanachewicz:我不明白你的评论。它与问题有什么关系?
  • 换句话说,stdlib 容器不能保证不会复制或移动您的数据。您应该在其中存储指向对象的指针。
  • 问题与内在数据类型有关,即整数、长整数、双精度等。
  • @BartekBanachewicz 即使没有,您也完全可以决定将哪些对象存储在容器中,以及它们相对于存储类型的内存占用不会改变,无论是使用指针、双精度还是魔术超级对象。使用指针而不是值作为一般建议只是完全垃圾,并且取决于特定的类型和情况。您还可以从容器类型中推断出明显的保证,因为标准对重新分配和复杂性做出了断言(即使标准允许,也没有人无故复制元素)。

标签: c++ memory-management stl


【解决方案1】:

实现一个自定义分配器,它将计算使用的内存,并将其提供给地图/集的构造函数。

【讨论】:

  • 网上有没有简短的介绍如何为此编写自定义分配器?
  • 注意:由于(可能)分配中的碎片,将真正使用的内存与进程消耗的内存的影响关联起来是相对困难的。
猜你喜欢
  • 2021-05-30
  • 2014-04-15
  • 2014-03-01
  • 2010-10-17
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多