Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« : 14-02-2012 04:20 » |
|
вот такой вопрос заинтересовал - при использовании контейнеров STL локально, при использовании виджетов а-ля Qt (когда родитель сам чистит память от детей) и т.д. - происходит постоянное небольшое выделение памяти из кучи (через new, к примеру) и возврат , само собой. Это всё как-нибудь влияет на фрагментацию ОЗУ или же сейчас какие-то механизмы в винде используются для этакой фоновой дефрагментации ?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 14-02-2012 06:12 » |
|
Конечно, фрагментируется. Ведь у тебя объекты зафиксированы в памяти. Если бы использовалась двойная ссылочность, как в языках с динамическим управлением памятью: маленький объект-описатель и перемещаемая область памяти, то можно было бы дефрагментировать на ходу, перемещая страницы по адресному пространству.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #2 : 14-02-2012 10:25 » |
|
и как с этим бороться ? )
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 14-02-2012 10:28 » |
|
А нужно ли бороться? Вспомни "оптимизацию" Если все же нужно, то варианта два: свой менеджер кучи или пул объектов. И то, и другое, довольно специфично.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #4 : 14-02-2012 11:41 » |
|
А нужно ли бороться? Вспомни "оптимизацию" ну, то есть, пока никто не жалуется - пофиг ? ))
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 14-02-2012 11:50 » |
|
Именно! Пусть разработчики библиотек за нас об этом думаю. Конечно, это "скучно и не спортивно", но универсального варианта оптимизации нет.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #6 : 14-02-2012 12:01 » |
|
За дефрагментацию кучи отвечает менеджер памяти. И он, как мне кажется, никак неуправляем. Он сам разбиратеся с дефрагментацией. Дефрагментация нужна при работе с большим массивом данных. У тебя именно такая проблема? Или ты спрашиваешь "взагали"?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #7 : 14-02-2012 18:15 » |
|
Леш, другой вопрос А зачем ты используеш STL и Qt вместе? Вроде бы в Qt есть свои классы контейнеры.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #8 : 14-02-2012 18:30 » |
|
Sla, именно как теорию
Finch, вопрос не только про Qt. Ну а что касается кутешных контейнеров - ими стараюсь не пользоваться, если только библиотека не навязывает )
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #9 : 14-02-2012 20:12 » |
|
Леш. Qt полностью перекрывает STL библиотеку. Так что, лично я не вижу смысла подключать лишнию зависимость.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 14-02-2012 20:28 » |
|
Finch, как же "подключать зависимость", когда STL - неотъемлемая часть C++?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #11 : 14-02-2012 20:44 » |
|
Dimka, А что, если не использовать библиотеку STL в проекте, она все равно будет подключаться в проект? Я демал, все таки хотя бы нужны инклуды. А тут оказывается само уже есть.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Online
Сообщений: 13
|
|
« Ответ #12 : 15-02-2012 03:09 » |
|
Finch, там же шаблоны Не используешь - и не будет кода. Но я стараюсь не пользоваться Qt-контейнерами по другой причине - если я привык к STL и более-менее с ним разобрался, зачем мне то же самое делать с другим видом контейнеров, которые делают то же самое ? Лучше лишний раз потренирую навыки по STL. Опять же - часть кода я могу использовать из не Qt-шного проекта, и наоборот.
|
|
|
Записан
|
|
|
|
|