【发布时间】:2015-09-24 06:07:07
【问题描述】:
我需要从传感器获取数 GB 的数据。当我尝试使用 malloc(10 或更多 GB。我的系统有 32 GB)分配一个大数组时,它返回 NULL。所以我认为这个问题可以通过向量的迭代器链表来解决。
但是我不知道如何设置。我试着声明“ list" 但我无法为每个向量分配内存(e/o 应该有 1000~2000 个元素)。你知道有什么方法可以做到这一点,或者对于这个大内存分配有更好的解决方案吗?
【问题讨论】:
-
如果你不需要连续的内存,你可以试试
deque,它会分配更小的块。 -
“我的系统有 32GB” - 我假设是 RAM。 RAM 与所有这些无关。您需要了解虚拟内存管理,以及地址空间如何施加真正的限制。
-
为什么要使用迭代器列表而不是例如向量的向量? (本质上这就是双端队列,但不确定块大小是多少。
-
您将需要使用保留那么多内存的操作系统功能(因此没有其他应用程序可以使用它)。还要研究如何关闭 virtual memory 和 paging。您可能必须等待其他程序终止或强制其他程序终止,以便获取它们的内存。
-
@papanoel87 如果您不能获得超过 2GB 的空间,那么您可能拥有 32 位操作系统或应用程序版本。将所有内容移至 64 位,如果仍有问题,请返回。并且请定义“快速”,这不是一个非常精确的术语 - 现在计算机对于大多数操作来说都快得令人眼花缭乱,即使没有优化。
标签: c++ list memory vector std