【发布时间】:2017-09-19 05:34:37
【问题描述】:
我有一个大小为 2KB 的类(表示树中的一个节点),当我的程序运行时,它分配了大约 60,000 个节点,这些节点占用了 120 MB 的内存。
我想为我的应用减少这种内存占用。为此,我试图找到一种方法,使内存不是在堆中分配,而是在虚拟内存中分配。
我已经为此查看了 mmap 文件。但是,我有以下疑问:
- 我查看了类的序列化(使用 boost),然后将其存储在内存映射文件中。但是类很大,可能无法序列化
- 然后我遇到了 basic_managed_shared_memory(再次提升)。但我不知道如何在这个托管内存中分配我的类的新实例。也欢迎在这里提供任何帮助。
所以,我关心的是如何在有或没有内存映射文件的情况下在虚拟内存中分配我的类的新实例。
P.S.:该应用程序将在 iOS 上运行。
【问题讨论】:
-
为什么不将对象存储在 NoSQL 数据库中?只加载你需要的东西。不过,您可能必须能够序列化整个对象。
-
“序列化可能不可能” 为什么不呢?如果不方便,序列化应该总是可行。
-
您可以使用支持 iOS 的高性能键值存储数据库,例如 [LMDB][1](Lightning Memory-Mapped Database)来存储您的 2 KB 节点序列化。 2 KB 块的序列化应该很容易归档。
-
如果数据不是很随机,也可以使用内存压缩技术。
-
实施压缩/数据库存储后,您会发现设备电池消耗得更快。 :-]
标签: c++ ios memory-management boost virtual-memory