Mein Code hat eine 4D-Matrix in es für einige mathematische Problem ist zu lösenC++ 4d Array Speicherfreigabe ist langsam
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;
Die Größen sind sehr groß WidthColumns = 2018 HeightLines = 1332, W_size = 7, die Speicherzuweisung ist sehr schnell, aber die Speicherfreigabe (delete) ist sehr langsam.
Gibt es eine Möglichkeit, es zu optimieren?
Ich müde openMP, aber es wirft nicht zusammenhängende Fehler der fehlenden DLL, die da sind ... Wenn ich die #pragma omp parallel entfernt für alles funktioniert gut. aber langsam ...
Sie sind ein Release-Build ausgeführt wird? Ich habe Fälle gesehen, in denen ein Debug-Build in Visual Studio 100-mal länger ausgeführt hat als ein Release-Build, da die zusätzliche Überprüfung in einem Debug-Build wie dem Test auf Heap-Fehler durchgeführt wird. Betrachte auch ein 1D-Array. – drescherjm
Für die Liebe von all dem, was unheilig im Universum ist, benutze bitte 'std :: vector' und einen passenden Smartpointer. –
@CaptainObvlious Ich tat es ist nicht schneller – Gilad