gpt4 book ai didi

c++ - 如何在 C++ 中处理大小为 1,000,000,000 的数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:23 25 4
gpt4 key购买 nike

我需要处理 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com