最佳存货方式2xx百万点

时间:2014-02-13 12:40:02

标签: c++ arrays qt pointers

所以我需要一个包含2xx小地形(地面)的Terrain(地面)阵列。每个小地形(地面)包含1 000 000个浮点数。

所以我想到了像

这样的东西
QVector<QVector<float> > terrain;
QVector<float> littleTerrain;

但是,我可以做的所有分配都存在问题。

当然,我想到了

QVector<float*>

但是有必要删除向量中的所有指针

那么,这里可以使用智能指针吗?否则,最好的选择是什么?

3 个答案:

答案 0 :(得分:0)

float是4个字节,指针在32位配置中也是4个字节,因此没有必要为你的浮点数保存指针。向量可以用于您的目的,但您应该首先为您的向量保留内存。还尝试确定向量实现的限制。从库到库,实现可能有所不同。

答案 1 :(得分:0)

如果您只想支持64位架构,那么肯定会有一个向量列表。它的工作非常糟糕,因为可能没有足够的物理RAM来支持它。

在32位体系结构上,您没有足够的地址空间来将其全部保存在简单的数据结构中。

因此,您需要做的是一种缓存方案,其中只有该数据的一部分随时驻留在内存数据结构中。为了优化缓存行为,在所有级别(L1,L2,L3,分页),您需要 - 这很重要 - 保持相邻内存地址中的空间相邻数据

这样做的一种方法是将所有地形细分为32x32单位正方形。请注意,32*32*sizeof(float) == 4096是大多数系统上的小页面大小。该方块应进一步细分为4x4单位正方形。请注意4*4*sizeof(float) == 64并且是许多系统上的缓存行大小。

答案 2 :(得分:0)

开销与您拥有的容器数量成正比 - 几百个容器,总共几千字节。换句话说,什么都没有。

重要的是为每个“littleTerrain”保留足够的内存数量。否则Qt会确保它适合,但可能会分配大约50%左右。