【发布时间】:2017-05-01 14:32:51
【问题描述】:
我的代码中有一个 4D 矩阵,用于解决一些数学问题
int**** Sads = new int***[inputImage->HeightLines];
for (size_t i = 0; i < inputImage->HeightLines; i++)
{
Sads[i] = new int**[inputImage->WidthColumns];
for (size_t j = 0; j < inputImage->WidthColumns; j++)
{
Sads[i][j] = new int*[W_SIZE];
for (size_t k = 0; k < W_SIZE; k++)
{
Sads[i][j][k] = new int[W_SIZE];
}
}
}
//do something with Sads...
for (int i = 0; i < inputImage->HeightLines; i++)
{
int*** tempI = Sads[i];
for (int j = 0; j < inputImage->WidthColumns; j++)
{
int** tempJ = tempI[j];
for (int k = 0; k < W_SIZE; k++)
{
delete[] tempJ[k];
}
delete[] Sads[i][j];
}
delete[] Sads[i];
}
delete[] Sads;
大小非常大 WidthColumns = 2018, HeightLines = 1332, W_SIZE =7,内存分配非常快但内存释放(删除)非常慢。
有没有办法优化它?
我厌倦了openMP,但它会抛出不相关的缺少DLL的错误……如果我删除了#pragma omp parallel,一切正常。但是很慢……
【问题讨论】:
-
您正在运行发布版本吗?我已经看到了 Visual Studio 中的调试版本的执行时间比发布版本长 100 倍的情况,因为在调试版本中会发生额外的检查,例如堆损坏测试。还要考虑一维数组。
-
为了爱宇宙中所有邪恶的事物,请使用
std::vector和适当的智能指针。 -
@CaptainObvlious 我做到了并不快
-
@drescherjm 我将更改为发布,我不知道速度因素在内存分配中如此疯狂,但是我也在尝试进行 TDD 单元测试并在调试模式下运行它们,所以我想也许有人有更好的方法。一维数组当然意味着索引游戏,但也许这是要走的路。谢谢
-
那个代码比好莱坞星光大道的星星还多。
标签: c++ optimization memory-management