![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Хотел задать вопрос больше теоретического плана: как работают распределители памяти? Ну в качестве примера возьму код из моей программы уже приводимый на форуме.
Есть вектор log, каждый элемент которого содержит вектор params, с набором значений параметров. Когда params был массивом, то в принципе распределение можно сделать уже указанным способом: выделять какому-то буферу большой кусок памяти, а потом "раздавать" эту память массивам params! Т.е. операция выделения памяти будет происходить не на каждой итерации чтения новой записи из файла.
Если же params - вектор, то следует писать распределитель памяти. Но при этом визуально код чтения не меняется и получается, что на каждой итерации идет выделение памяти. Или я что-то не так понимаю?
Как видно по коду, то в первом случае выделение происходит только при определенных условиях, а во 2 случае таких условий не видно. Каким же образом тогда происходит распределение памяти? |
|
|
Tonal |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Ну почитай ты книжки. Распределение памяти - это не тот момент который удобно объяснять на форуме на пальцах.
У того же Страуструпа описано и у Саттера вроде... Я бы, в подобном случае вообще свой механизм сделал - единый блоковый контейнер для PARAMVALUE и boost::range в LOGRECORD. Код использования был бы примерно такой:
Где ParamValueChihkContainer::constrict отдаёт std::pair<T*, T*> на в текущем распределённом блоке, если там есть место, или распределяет новый блок, если места нет. Опять же, для его реализации я бы воспользовался boost::pool. ![]() |
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Саттера дочитываю!
![]() ![]() |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.6.2025, 17:51 |