【发布时间】:2015-12-11 10:24:09
【问题描述】:
抱歉,如果以前有人问过这个问题,我找不到一个完全回答我想知道的问题。他们提到了这样做的方法,但不比较方法。
我正在用 C++ 编写一个程序来解决 PDE 到稳定状态。我不知道这需要多少时间步骤。因此我不知道我的时间数组会有多长时间。这将有 100,000 秒的最大时间,但时间步长可能小至 0.001,因此在最坏的情况下它可能长达 1e8 doubles(也不一定是罕见的情况)。
就内存分配和运行时间而言,最有效的实现方式是什么?
我看过的选项:
- 动态分配包含 1e8 个元素的数组,其中大部分元素永远不会被使用。
- 最初分配一个较小的数组,在需要时创建一个较大的数组并复制元素
- 使用
std::vector和它的大小增加功能
还有其他选择吗?
我主要关心速度,但我也想知道其中涉及到哪些内存考虑
【问题讨论】:
-
我的 PDE 使用 C++ Boost 库中的 BLAS。考虑查看矩阵和稀疏矩阵类。
-
具有 1e8 双精度的数组将占用多达 800 GB 的数据,这是您不希望拥有的。因此,您必须考虑更大的步长或更小的时间尺度。
-
我实际上并没有进行计算。没想到会这么大:D
-
您想针对一般情况、最常见情况还是最坏情况进行优化?使用
std::vector并根据球场猜测保留通常是一个好的开始。 -
@arc_lupus 1e8 是一亿,所以 ~800 MB。
标签: c++ arrays performance memory-management