Gil*_*lad -1 c++ optimization memory-management
我的代码中有一个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;
Run Code Online (Sandbox Code Playgroud)
大小非常大WidthColumns = 2018,HeightLines = 1332,W_SIZE = 7,内存分配非常快但内存释放(删除)非常慢.
有没有办法优化它?
我厌倦了openMP,但是它抛出了无关的DLL错误,如果我删除了#pragma omp并行,一切正常.但是慢......
小智 6
使用指向...的指针是一个坏主意,因为它会分裂你的数据很多.
我会创建一个类来管理索引转换和使用1D数组,它有点复杂但它会更快.
无论如何,一个诀窍:没有什么可以阻止你使用指向内存区域的指针构建你的int****,该区域不是稀疏的(你预先分配的1D数组),然后将它用作4D数组.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |