Russian Qt Forum
Ноябрь 22, 2024, 21:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Поход в boost
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Поход в boost (Прочитано 6911 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Поход в boost
«
:
Сентябрь 27, 2015, 08:12 »
Добрый день
Понадобился кастомный аллокатор чтобы не вызывать new/delete на каждый чих. Выглядит примерно так
Цитировать
Выделение эл-та(ов): напр нужно распределить 1 эл-т, а мы распределим сразу напр new[100] и вернем адрес на 1-й. Когда нужно распределить 2-й - new уже делать не будем а просто вернем адрес на 2-й (из 100) и.т.д пока не кончатся наши 100. А тогда опять new[100], т.е. новый блок
Удаление эл-та(ов): не освобождаем память, а связываем "удаленные" эл-ты в список с тем чтобы использовать их при следующих выделениях.
Однако все это становится не так уж просто если выделяется переменное число эл-тов. Да и вообще, с какой стати здесь "велосипедить"? Ведь задача самая что ни на есть стандартная. Решено: будем использовать "готовые проверенные решения"
Да, но где ж его взять? Не помню такого ни в Qt ни в std. Ладно, надо искать а бусте (ведь круче нет, правда?).
Открываю
Allocators, containers and memory allocation algorithms
- ну а где ж искать как не здесь? И сразу получаю по рогам
Цитировать
Introduction to Interprocess allocators
Ни хрена не пойму - это что, все посвящено Interprocess? Но я никакого обмена между процессами не планировал..
Ладно, попробуем с др стороны
pool_alloc
- вроде по смыслу "оно", но тут какой-то мутекс, и где/откуда его брать хз. Ладно, как же его юзать? Гуглю "pool_alloc example" - ничего внятного.
Я понимаю что у каждой либы свои правила и не требую легкости Qt Assistant. Но что мне делать (или какие подходы использовать) чтобы "прикоснуться к великому"?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Поход в boost
«
Ответ #1 :
Сентябрь 27, 2015, 12:34 »
У буста херово с документацией, приходится гуглить постоянно.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qate
Супер
Offline
Сообщений: 1177
Re: Поход в boost
«
Ответ #2 :
Сентябрь 28, 2015, 09:30 »
а чем плохо вызывать new и delete для каждого объекта ?
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: Поход в boost
«
Ответ #3 :
Сентябрь 28, 2015, 09:44 »
Цитата: qate от Сентябрь 28, 2015, 09:30
а чем плохо вызывать new и delete для каждого объекта ?
Это абстрактный вопрос. Все зависит от того, что используется под капотом этих операторов.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Поход в boost
«
Ответ #4 :
Сентябрь 28, 2015, 10:11 »
Цитата: Old от Сентябрь 28, 2015, 09:44
Цитата: qate от Сентябрь 28, 2015, 09:30
а чем плохо вызывать new и delete для каждого объекта ?
Это абстрактный вопрос. Все зависит от того, что используется под капотом этих операторов.
да, хотел этим вопросом чтобы ТС раскрыл понятие свое объекта, которых он хотел много и как часто new delete
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Поход в boost
«
Ответ #5 :
Сентябрь 28, 2015, 10:44 »
Цитата: qate от Сентябрь 28, 2015, 10:11
да, хотел этим вопросом чтобы ТС раскрыл понятие свое объекта, которых он хотел много и как часто new delete
Вот сейчас
читаю
. Хорошо пишут. См
Dynamic memory allocation is often inefficient
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Поход в boost
«
Ответ #6 :
Сентябрь 28, 2015, 11:12 »
Цитата: qate от Сентябрь 28, 2015, 09:30
а чем плохо вызывать new и delete для каждого объекта ?
1. быстродействие
2. риск фрагментации памяти
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
qate
Супер
Offline
Сообщений: 1177
Re: Поход в boost
«
Ответ #7 :
Сентябрь 28, 2015, 11:28 »
Цитата: Racheengel от Сентябрь 28, 2015, 11:12
Цитата: qate от Сентябрь 28, 2015, 09:30
а чем плохо вызывать new и delete для каждого объекта ?
1. быстродействие
2. риск фрагментации памяти
1. зависит от объекта: если много действий в конструкторе и деструкторе, то быстродействие не страдает
2. тут не скажу, надо бы изучить вопрос подробнее
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Поход в boost
«
Ответ #8 :
Сентябрь 28, 2015, 11:39 »
Цитата: qate от Сентябрь 28, 2015, 09:30
1. зависит от объекта: если много действий в конструкторе и деструкторе, то быстродействие не страдает
То есть как это?
Вот, допустим, new занимает N времени, остальной конструктор дополнительно M времени, соответственно общее время конструктора N+M. Для X объектов время будет X*N + X*M, т.е. в любом случае затраты на new мультиплицируются.
Конечно, все зависит от того, как часто объекты создаются, но здесь то речь как раз о том, что "очень часто". И тогда это критично - иначе бы люди не делали пулов
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
qate
Супер
Offline
Сообщений: 1177
Re: Поход в boost
«
Ответ #9 :
Сентябрь 28, 2015, 12:25 »
Цитата: Racheengel от Сентябрь 28, 2015, 11:39
Цитата: qate от Сентябрь 28, 2015, 09:30
1. зависит от объекта: если много действий в конструкторе и деструкторе, то быстродействие не страдает
То есть как это?
имел ввиду, что время new значительно меньше конструктора\деструктора, не забываем также что свой new также будет время занимать )
думаю, что писать свой пул - это надо иметь веские причины и тесты, что стандартный работает плохо, а свой велосипед лучше
без тестов "до" и "после" - все это ради разговора только
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Поход в boost
«
Ответ #10 :
Сентябрь 28, 2015, 12:58 »
Цитата: qate от Сентябрь 28, 2015, 12:25
имел ввиду, что время new значительно меньше конструктора\деструктора, не забываем также что свой new также будет время занимать )
думаю, что писать свой пул - это надо иметь веские причины и тесты, что стандартный работает плохо, а свой велосипед лучше
без тестов "до" и "после" - все это ради разговора только
Что ж Вы так недоброжелательно (или даже агрессивно) относитесь к незнакомым вещам
Пройти по ссылке наверно было тяжко, ну ладно, приведу здесь
Цитировать
Dynamic memory allocation is often inefficient
Because of the complication of dynamic memory allocation, it is often inefficient in terms of time and/or space. Most memory allocation algorithms store some form of information with each memory block, either the block size or some relational information, such as its position in the internal tree or list structure. It is common for such header fields to take up one machine word in a block that is being used by the program. The obvious disadvantage, then, is when small objects are dynamically allocated. For example, if ints were dynamically allocated, then automatically the algorithm will reserve space for the header fields as well, and we end up with a 50% waste of memory. Of course, this is a worst-case scenario. However, more modern programs are making use of small objects on the heap; and that is making this problem more and more apparent. Wilson et. al. state that an average-case memory overhead is about ten to twenty percent2. This memory overhead will grow higher as more programs use more smaller objects. It is this memory overhead that brings programs closer to the virtual limit.
In larger systems, the memory overhead is not as big of a problem (compared to the amount of time it would take to work around it), and thus is often ignored. However, there are situations where many allocations and/or deallocations of smaller objects are taking place as part of a time-critical algorithm, and in these situations, the system-supplied memory allocator is often too slow.
Да, и про скорость я разговора не начинал, получил серьезный перерасход памяти в той самой ситуации "мелкого но много". И о написании своего пула речь не идет, вопрос где такой готовый.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Поход в boost
«
Ответ #11 :
Сентябрь 28, 2015, 14:34 »
Цитата: Igors от Сентябрь 28, 2015, 12:58
Что ж Вы так недоброжелательно (или даже агрессивно) относитесь к незнакомым вещам
это не агрессия, а опыт тестирования )
есть баг или медленная работа - фиксируем, исправляем, проверяем теже действия
нужна новая фича в распределении памяти, а был ли баг или медленная работа ?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Поход в boost
«
Ответ #12 :
Сентябрь 28, 2015, 14:59 »
Цитата: qate от Сентябрь 28, 2015, 14:34
это не агрессия, а опыт тестирования )
Наверное "богатый" (опыт-то)
Цитата: qate от Сентябрь 28, 2015, 14:34
есть баг или медленная работа - фиксируем, исправляем, проверяем теже действия
Вы как-то все время "даете рекомендации", и я прям теряюсь, как же их выполнять?
Цитата: qate от Сентябрь 28, 2015, 14:34
нужна новая фича в распределении памяти, а был ли баг или медленная работа ?
Про скорость Вы начали разговор, а моя проблема - жрется много памяти, ну и на слабой машине уходит в свапы и.т.п. Где съедается память - недавно обсуждали
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...