Время для удаления указателей - PullRequest
5 голосов
/ 24 июня 2010

Hei community,

У меня небольшой вопрос, касающийся удаления указателей.

Я работаю с матрицами указатель-указатель размера Dimension 1024x1024.Поскольку я создаю их динамически, я удаляю выделенное для них пространство в конце программы.Но выполнение этого в обычном цикле стоит довольно много времени - я измерял около 2 секунд, используя тактовую частоту процессора.И 2 секунды это ОГРОМНО, когда программа запускается всего 15 секунд - плюс: функция, использующая эти выделенные указатели, вызывается более одного раза ...

Вот измеренный кусок кода, критичный ко времени, включая измерение:

time=clock();
for(i=0;i<xSize;i++){            //xSize is dynamic, but 1024 for the measurement
    delete [] inDaten[i];
    delete [] inDaten2[i];
    delete [] copy[i];
}
delete inDaten; delete inDaten2; delete copy;
time=clock()-time;
     time/=CLOCKS_PER_SEC;

Является ли удаление указателей ВСЕГДА таким долгим?Или я просто поступаю неправильно?

Я надеюсь, что кто-то здесь может мне помочь с этим.Так как я оптимизирую довольно сложную программу для более быстрой работы, я не могу использовать этот 2-секундный фрагмент кода.Это просто СЛИШКОМ медленно, по сравнению со всеми остальными частями.Но все же мне нужно иметь возможность реализовать этот код динамически.SmartPointers могут быть полезны, но если я правильно понимаю, им также нужно время, чтобы удалить себя - просто в другое время ...

Спасибо за ваши ответы!

Барадрист

РЕДАКТИРОВАТЬ: я только что узнал, что измерение этих delete-вычислений довольно медленно, потому что я не компилировал его в режиме выпуска.Так как отладчик вступает в игру, я измерил эти (в конце концов нереальные) числа, от которых у меня разболелась голова.Последняя программа оптимизируется достаточно автоматически, так что удаление больше почти не занимает времени.

В любом случае: спасибо за все полезные ответы!Они принесли мне много дополнительных знаний и вещей для размышления !!!!

Ответы [ 12 ]

0 голосов
/ 24 июня 2010

Большое спасибо за все быстрые ответы !!!Приятно видеть, что кто-то там помогает =).Тем не менее, для моей проблемы кажется, что мне приходится иметь дело с этой потерей времени, поскольку мне нужны динамические массивы в качестве временных матриц в небольших подпрограммах, которые не выполняются в конце.

В любом случае: снова СПАСИБО!!И хорошего вам дня!

Барадрист

0 голосов
/ 24 июня 2010

Попробуйте создать свои собственные методы выделения памяти, чтобы сократить время уничтожения.

Например, запросите блок памяти из Os и выделите для него массив, чтобы вы могли освободить весь блок водин оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...