2 / 2 / 4
Регистрация: 28.06.2013
Сообщений: 56
1

Скорость выполнения delete

29.09.2015, 21:13. Показов 803. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Интересует почему скорость выполнения деструктора зависит нелинейно от объёма структуры? Есть у меня бинарное дерево глубиной ~15(это 65535 узлов) и это же дерево глубиной 18(524287). В первом случае деструктор выполняется за 874 мс, во втором 27264 мс.
C++
1
2
3
4
5
6
7
8
9
10
11
~Binary_Space_Partitioning() { clear(head); head = NULL; }
 
void Binary_Space_Partitioning::clear(bsp_node *node)
{
    if(node != NULL)
    {
        clear(node->left);
        clear(node->right);
        delete node;
    }
}
Почему операции delete занимают так много времени в случае второго дерева? На его создание уходит значительно меньше времени(на порядок). В случае же глубины 15 время создание даже чуть больше - 1280. Могу предположить, что дело во фрагментации, хотя всё равно непонятно почему выделяет память быстрее, чем освобождает.

В общем меня такие объёмы данных пока не интересуют, но как можно решить такую проблему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2015, 21:13
Ответы с готовыми решениями:

Динамический массив структур. Почему данные доступны после выполнения операции delete []
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю...

Скорость выполнения.
Есть консольное приложение, работающее с огромными текстовыми файлами, сравнивает их, читает,...

Скорость выполнения операторов
Привет всем. У меня есть задачка с которой не могу справится, она очень простая но функций с...

Скорость выполнения программы
Здравствуйте, уважаемые форумчане. Решил задаться таким вопросом. Какой из вариантов удаления цифр...

3
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
29.09.2015, 21:19 2
Цитата Сообщение от Skaarj Посмотреть сообщение
как можно решить такую проблему?
объектные пулы памяти.
1
2 / 2 / 4
Регистрация: 28.06.2013
Сообщений: 56
30.09.2015, 07:12  [ТС] 3
Вопрос всё равно остаётся открытом, чисто из академических соображений - почему операция выделения памяти new выполняется значительно быстрее чем delete? Структура узла занимает 56 байт.

C++
1
2
3
4
5
6
7
8
struct bsp_node {
    std::vector<size_t > polygon_index;
    coefficient scope;  
    size_t hplane_index;
    plane_type hplane_type;
    bsp_node *left; 
    bsp_node *right;                
};
0
2 / 2 / 4
Регистрация: 28.06.2013
Сообщений: 56
02.10.2015, 09:59  [ТС] 4
В общем более менее разобрался в чём дело. Попробовал релиз версию(непосредственно из папки) - скорость значительно быстрее - примерно столько же сколько в debug, но без освобождения памяти. В debug режиме винда накладывает ограничения на компилятор и при освобождение памяти он ещё проверяет на целостность освобождаемые блоки и только потом помечает их как освобожденные. А ещё освобожденные, смежные блоки объединяет. Естественно при большой фрагментации это всё будет занимать не мало времени.
0
02.10.2015, 09:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2015, 09:59
Помогаю со студенческими работами здесь

От чего зависит скорость выполнения программы?
от чего больше всего зависит скорость выполнения программы?

Как узнать скорость выполнения программы?
Должна же быть какая то функция или метод, чтобы узнать время выполнения программы, или возможно...

Скорость выполнения, а так же работа с дв. файлами
Здравствуйте. У меня есть несколько вопросов, на которые я уже давненько ищу ответы, а именно : ...

Скорость выполнения запросов в SQLite
Здравствуйте! Собственно, мне нужно осуществлять динамическую запись в журнал происходящих в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru