C++ 4d数组内存释放很慢

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数组.