Создание быстродействующего распределителя памяти, для std::vector или замена глобальных операций выделения памяти |
Здравствуйте, гость ( Вход | Регистрация )
Создание быстродействующего распределителя памяти, для std::vector или замена глобальных операций выделения памяти |
BRE |
30.6.2009, 9:28
Сообщение
#21
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Есть ини-файл, в котором определено, какие-именно параметры следует выбирать из лог-файлов (бинарные файлы определенного формата, записанные авиа-приборами)! Данные этого ини-файла (описание параметров) считываются в вектор QVector<ParamDescr*>, ParamDescr - абстрактный класс, описывающий вид параметров (в общем виде - название параметра, адрес (в восьмеричной системе счисления), тип параметра). При чтении лог-файлов значения нужных параметров (сравниваются получаемые адреса) записываются по нужному индексу в вектор значений параметров (как раз в params)! Что именно делать с QList, как и что складывать я не совсем понял. Можешь пояснить, пожалуйста? Если что-то в коде запишешь, буду благодарен. Так может удобней будет использовать QMap. INI-файл читается в QMap<адрес, ParamDescr*>, а дальше при чтении логов из мапа находиться необходимый параметр и устанавливаются его значение? |
|
|
AD |
30.6.2009, 9:31
Сообщение
#22
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Так может удобней будет использовать QMap. INI-файл читается в QMap<адрес, ParamDescr*>, а дальше при чтении логов из мапа находиться необходимый параметр и устанавливаются его значение? Нельзя, уже реализовано. Перетряхивать всю программу - нерентабельно. Задача - ускорить при загрузке. Далее - будет ускорить при отрисовке- но это уже другой вопрос. |
|
|
Tonal |
30.6.2009, 10:28
Сообщение
#23
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Цитата(Tonal) В stl у std::vector есть параметр шаблона, который позволяет указать свой менеджер памяти для этого вектора - это именно то, что тебе нужно. Раньше не писал собственных аллокаторов памяти. Поможешь если что? С чего написание аллокатора памяти начать писать? Заранее спасибо! Ничего писать не нужно. Смотри здесь, в самом конеце страницы. |
|
|
AD |
30.6.2009, 10:41
Сообщение
#24
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Ничего писать не нужно. Смотри здесь, в самом конце страницы. А мне какой allocator использовать? Буста в проекте нет! Ну как я понял, хватит какого-то стандартного. Какой необходим? Прости, если глупый вопрос, возможно, чего-то не понимаю! Сообщение отредактировал AD - 30.6.2009, 10:43 |
|
|
Tonal |
30.6.2009, 10:54
Сообщение
#25
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Можешь написать свой, проще зацепить из буста.
Где-то я встречал библиотечку шаблонов для лёгкого написания аллокаторов stl - думал в бусте, сейчас не вспомню... |
|
|
AD |
30.6.2009, 11:11
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Можешь написать свой, проще зацепить из буста. Где-то я встречал библиотечку шаблонов для лёгкого написания аллокаторов stl - думал в бусте, сейчас не вспомню... Думаю, тогда может попробовать написать свой! Если что, поможете? Надо научиться их писать! Заодно увидеть, как это все устроено. А то одной теории из Саттера, маловато будет! |
|
|
AD |
30.6.2009, 12:09
Сообщение
#27
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
да, кстати, а мне нужно наследоваться от стандартного аллокатора? Или полностью "свои велосипеды" писать?
|
|
|
AD |
30.6.2009, 14:09
Сообщение
#28
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Странно, как-то не очень помогло. Или я что-то забыл?
allocator
Вот как использую
В чем еще могут быть проблемы? Что-то еще следует дописать? |
|
|
Влад |
30.6.2009, 14:49
Сообщение
#29
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Хм, есть опасение, что если причиной разработки аллокатора стали проблемы с быстродействием программы (т.е. это попытка улучшить быстродействие), то вряд ли чего получится. Хотя, конечно, "нет процессора, кроме процессора, и Профайлер - пророк его"
Причина мне представляется в том, что в многопоточных версиях CRT (по крайней мере, под Win) глобальные операторы ::new и ::delete защищены критической секцией - и операции выделения памяти по ::new и удаления по ::delete ну очень! "дорогие" по времени. |
|
|
BRE |
30.6.2009, 14:56
Сообщение
#30
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 11:31 |