我编写了一个程序,需要使用以下库处理非常大的数据:
- 载体
- boost::unordered_map
- boost::unordered_multimap
所以,我有内存问题(该程序使用了很多),我在想也许我可以替换这个库(用已经存在的东西或我自己的实现):
那么,三个问题:
- 如果用 C 数组替换 vector 会节省多少内存?值得吗?
- 谁能解释一下当前实现中的 boost::unordered_map 和 boost::unordered_multimap 是如何使用内存的?比如为实现其性能而存储的内容。
- 你能给我推荐一些在内存使用方面优于 boost::unordered_map 和 boost::unordered_multimap 的库吗(但不要太慢)?
最佳答案
std::vector
是内存高效的。我不知道 boost 贴图,但 Boost 人员通常知道他们在做什么,我怀疑您是否会通过创建自己的变体来节省大量内存。
您可以做一些其他事情来帮助解决内存问题:
- 在 64 位中编译。在 64 位进程中耗尽内存非常很难。
- 您不会耗尽内存,但内存可能会被换出。相反,您应该查看是否需要一次将所有内容加载到内存中,或许您可以一次处理大块数据。
- 附带的好处是,一次处理一大块数据可以让您并行运行代码。
如今内存如此便宜,因此分配 10GB RAM 非常简单,我猜你的瓶颈将在于你对数据的处理,而不是分配数据。
关于c++ - C++程序中的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821177/