一个NxM阵列或N个大小为M的阵列?

时间:2017-01-05 17:47:41

标签: c++ arrays performance multidimensional-array scientific-computing

我正在进行科学计算,需要存储粒子的速度。要存储3个组件,我应该使用3个不同的阵列还是单个1x3阵列?它会以任何方式影响我的计算吗?

我的颗粒数量很大,甚至可能达到1e10或更高。我将使用C ++。

1 个答案:

答案 0 :(得分:0)

始终尝试首先编写可读和可维护的代码,然后才进行优化。

在C ++中,就像在旧的C中一样,内存在brksbrk内部分配在一个大块(最小为10240字节)中。所以想象一下,你之前已经分配并释放了一些内存。

案例1:您创建了3个数组。最有可能的是,在使用过的那些中会有一些免费的块。所以它基本上会遍历空闲块列表并根据算法放置它们,可能是最合适的(但不仅仅是)。无论哪种方式,它都会(或者可能,因为它的运行时没有明确的答案)将它们分散在已经分配的内存上。说1在中间,然后其他两个在最后。

案例2:您创建了1个数组。然后将它分配到一个地方。新获得的存储空间或可用的存储空间。

所以我会使用1x3二维数组。这样你就会受益于参考原理的局部性,特别是记忆局部性

但是,正如我所说,你应该确保使用二维数组在数据连接方面不会损害可读性。

我希望这会有所帮助!