【发布时间】:2018-04-05 09:01:22
【问题描述】:
在我的程序中,我需要创建一个大型 3d 数组(~1GB) 我目前正在使用两个 for 循环来初始化数组:
float*** array = new float** [m_width];
for (unsigned int i = 0; i < m_width; i++)
{
array3d[i] = new float * [m_height];
for (unsigned int j = 0; j < m_height; j++)
{
array3d[i][j] = new float[m_layers];
}
}
代码运行良好,但速度很慢。 所以我的问题是:有没有更快的方法来为多维数组初始化/保留内存? (几乎可以立即创建一维数组)
【问题讨论】:
-
你能量化一下“非常慢”吗?
-
保留一个平面数组 (1d) 并计算在其索引处访问特定元素的维度。
-
那不是 3d 数组。它是指向浮点数组的指针数组的指针数组。
-
有趣的事实:最里面的数组没有初始化。
-
将内存分配为
width * height * depth的一个大块。如果您需要将其归零(或初始化为值),请使用memset。然后索引为 3d 数组。
标签: c++ performance multidimensional-array memory-management