Форум программистов, компьютерный форум CyberForum.ru

Что такое std::allocator<T> ? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 57, средняя оценка - 4.67
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
15.02.2012, 23:57     Что такое std::allocator<T> ? #1
я так понял возвращает адрес чего то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 23:57     Что такое std::allocator<T> ?
Посмотрите здесь:

std::allocator C++
C++ std::allocator
allocator std::map C++
что такое std::out C++
C++ std::map что такое и с чем это есть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:10     Что такое std::allocator<T> ? #2
HardMorg, это класс занимающийся управлением памяти в stl контейнерах. <T> - Т - тип размер которого послужит размером шага в куске памяти которым управляет аллокатор.
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.02.2012, 00:32  [ТС]     Что такое std::allocator<T> ? #3
Это понятно, только можно поподробней?
Как именно он управляет и зачем это нужно?
вот шаблон
template<class T, class AT = allocator<T>>
я так понимаю он тут возвращает адрес?
serejkus
46 / 44 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.02.2012, 00:42     Что такое std::allocator<T> ? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как именно управляет - это надо смотреть в реализации.
Зачем это нужно: рассмотрим два случая: 1) вы редко создаёте объекты, и у них долгое время жизни. Тогда вы вполне можете позволить себе выделять память для каждого объекта отдельно. 2) вы часто создаёте и уничтожаете объекты. Тогда вам может быть невыгодно постоянно обращаться к системе за выделением/освобождением памяти - вы можете выделить сразу большую область памяти, и отводить части этой памяти для свежесозданных объектов. При уничтожении вы просто помечаете адрес памяти как неиспользуемый, и не возвращаете память системе до конца работы приложения. Тут можно поуправлять тем, как расширяется, как уплотняется эта область памяти (например, для увеличения вероятности попадания в кэш процессора).
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.02.2012, 00:58  [ТС]     Что такое std::allocator<T> ? #5
Ну принципе что то понятно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.02.2012, 07:37     Что такое std::allocator<T> ? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
HardMorg, стандартный аллокатор просто-напросто выделяет память так же, как это делалось бы вручную через new. Штука в том, что вы можете написать собственный аллокатор, который работает иначе (но, разумеется, сохраняет интерфейс стандартного), так, как нужно вам в конкретной задаче. Тогда его можно будет использовать в стандартных контейнерах так же, как и стандартный библиотечный аллокатор.
Ещё одной особенностью аллокатора является то, что он разделяет выделение памяти и инициализацию объекта, а также освобождение памяти и удаление объекта. Т.е. при вызове метода allocate память выделяется, но конструктор не вызывается (вызывается операторная форма new, не вызывающая конструктора, а работающая как malloc). А вот конструктор объекта вызывается только по вызове метода construct при помощи placement new. То же с методами deallocate(освобождает память при помощи операторной формы delete)/destroy(явно вызывает деструктор объекта). Чтобы писать собственный аллокатор, надо знать подобные тонкости.
BPCD
0 / 0 / 0
Регистрация: 05.02.2015
Сообщений: 1
08.12.2015, 00:44     Что такое std::allocator<T> ? #7
следует ли из этого что:
размер памяти выделеной под программу не увеличивается при алокации, а растет только на момент конструирования объектов в выделенной памяти?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,876
Записей в блоге: 2
Завершенные тесты: 1
08.12.2015, 02:42     Что такое std::allocator<T> ? #8
Цитата Сообщение от BPCD Посмотреть сообщение
следует ли из этого что
Нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2015, 05:45     Что такое std::allocator<T> ?
Еще ссылки по теме:

C++ Распределитель памяти идентичный std::allocator. Непонятные синтаксис и концепция std::allocator::construct
C++ Что такое std::string()
Std::allocator<wchar_t>>' to 'LPCWSTR' C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.12.2015, 05:45     Что такое std::allocator<T> ? #9
BPCD, отвечу более развёрнуто:
Нет, не следует, поскольку память выделяет как раз операторная форма new, а placement new - это, по сути, способ явно вызвать конструктор, интерпретировав при этом некоторую (уже как-либо выделенную) область памяти как объект (хотя это уточнение излишне, потому что так происходит всегда - объект сам по себе всегда представляет собой просто набор байтов, который логически "режется" на куски, интерпретируемые как поля объекта). С другой стороны, количество захваченной программой памяти может увеличиваться при конструировании, ведь конструктор объекта, вызываемый через placement new, сам может запрашивать память из кучи. Но фактический захват памяти происходит при вызове метода allocate аллокатора.
Yandex
Объявления
08.12.2015, 05:45     Что такое std::allocator<T> ?
Ответ Создать тему
Опции темы

Текущее время: 19:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru