c++ - C++程序中的内存使用

标签 c++ memory vector boost-unordered

我编写了一个程序,需要使用以下库处理非常大的数据:

  • 载体
  • boost::unordered_map
  • boost::unordered_multimap

所以,我有内存问题(该程序使用了很多),我在想也许我可以替换这个库(用已经存在的东西或我自己的实现):

那么,三个问题:

  • 如果用 C 数组替换 vector 会节省多少内存?值得吗?
  • 谁能解释一下当前实现中的 boost::unordered_map 和 boost::unordered_multimap 是如何使用内存的?比如为实现其性能而存储的内容。
  • 你能给我推荐一些在内存使用方面优于 boost::unordered_map 和 boost::unordered_multimap 的库吗(但不要太慢)?

最佳答案

std::vector 是内存高效的。我不知道 boost 贴图,但 Boost 人员通常知道他们在做什么,我怀疑您是否会通过创建自己的变体来节省大量内存。

您可以做一些其他事情来帮助解决内存问题:

  1. 在 64 位中编译。在 64 位进程中耗尽内存非常很难。
  2. 您不会耗尽内存,但内存可能会被换出。相反,您应该查看是否需要一次将所有内容加载到内存中,或许您可以一次处理大块数据。
  3. 附带的好处是,一次处理一大块数据可以让您并行运行代码。

如今内存如此便宜,因此分配 10GB RAM 非常简单,我猜你的瓶颈将在于你对数据的处理,而不是分配数据。

关于c++ - C++程序中的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821177/

相关文章:

c++ - 密码保护嵌入式固件下载

java - 对于初学者来说,如何在 Emacs 中首次启用自动完成功能?

尝试通过内存中的地址调用函数时 C++ 程序崩溃(如何修复?)

java - 如何测试 vector 中找到的元素?

c++ - vector 子集的迭代器

c++ - Qt C++ 最小化和最大化窗口

swift - 新分配的对象之前可以在 Swift 中使用过 ObjectIdentifier 吗?

c++ - 奇数链表表示

arduino 上的 C++ vector 占用大量 RAM 空间

c++ - 使用 Clang 复制具有全局模板变量的符号