- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要处理 3D 立方体数据。它的元素数量可以达到数十亿。我知道我不能在 Windows 上分配那么多内存。所以我正在考虑使用进程内数据库进行基于磁盘的操作。有没有更好的方法来做到这一点?也许有什么 boost ?
更新:我最终将不得不提供带有绘图的浏览功能。
更新 2:下面的文章似乎是使用内存映射文件的一个很好的解决方案。我会尝试并再次更新。 http://www.codeproject.com/Articles/26275/Using-memory-mapped-files-to-conserve-physical-mem
最佳答案
第一步也是最基本的一步是将数据分解成 block 。 block 的大小取决于您的需要:它可以是可以一次绘制的最小或最大块,或者可以为其构建几何体,或者是压缩的最佳大小。
一旦您使用可管理的 block ,立即的内存问题就可以避免。根据需要流式传输 block (加载和卸载/保存)。
在加载/保存过程中,您可能希望涉及压缩和/或某种数据库。即使是像 RLE 和 SQLite(带有坐标和数据 blob 的单个表)这样简单的东西也可以节省大量空间。更好的压缩将使您能够处理更大的 block 。
根据使用情况,可以将 block 压缩在内存中,并且仅在修改时(或可以修改时)短暂解压缩。如果您的数据是只读的,加载它们并仅在需要时解压缩将非常有帮助。
将数据分成 block 也有附带好处,例如八叉树的一种极其简单的形式,允许几何生成(行进立方体等)在孤立的数据 block 上运行(简化线程),并使保存/加载过程明显更简单。
关于c++ - 如何在 C++ 中处理大小为 1,000,000,000 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588393/
我是一名优秀的程序员,十分优秀!