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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 57, средняя оценка - 4.67
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
#1

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

15.02.2012, 23:57. Просмотров 8330. Ответов 8
Метки нет (Все метки)

я так понял возвращает адрес чего то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 23:57     Что такое std::allocator<T> ?
Посмотрите здесь:

Распределитель памяти идентичный std::allocator. Непонятные синтаксис и концепция std::allocator::construct - C++
Компилятор: MSVC 2010 Exress код моего класса распределяющего память под спойлером #include &lt;stdlib.h&gt; // my memory allocator...

std::allocator - C++
я не смог найти хорошего описания роботы с аллокатором, так что спрашиваю у тех, кто с ним работал std::allocator::allocate (size_type...

std::allocator - C++
Здравствуйте! Подскажите почему возникает ошибка сегментирования: using std::cout; using std::endl; int main() { ...

Std::allocator<wchar_t>>' to 'LPCWSTR' - C++
собственно есть list&lt;wstring&gt; куда вставили много адресов типа L&quot;D:\\66\\99&quot;; Задача удалять папки по этому адресу (пока что папки пусты...

что такое std::out - C++
люди, в общем препод нам попался из разряда &quot;пришел унизился ушел&quot; ты ему слово, он тебе в ответ десять вопросов он задал мне банальый...

Что такое std::string() - C++
И скал в гугле- там ничего понимаемого. Начну, что я вообще в символьных не шарю. Обьясните пожалуста, что это и что оно делает. ...

Как сделать свой контейнер совместимым с std::allocator? - C++
Как сделать свой контейнер совместимым с std::allocator?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:10     Что такое std::allocator<T> ? #2
HardMorg, это класс занимающийся управлением памяти в stl контейнерах. <T> - Т - тип размер которого послужит размером шага в куске памяти которым управляет аллокатор.
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.02.2012, 00:32  [ТС]     Что такое std::allocator<T> ? #3
Это понятно, только можно поподробней?
Как именно он управляет и зачем это нужно?
вот шаблон
template<class T, class AT = allocator<T>>
я так понимаю он тут возвращает адрес?
serejkus
47 / 45 / 4
Регистрация: 31.10.2011
Сообщений: 98
16.02.2012, 00:42     Что такое std::allocator<T> ? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Как именно управляет - это надо смотреть в реализации.
Зачем это нужно: рассмотрим два случая: 1) вы редко создаёте объекты, и у них долгое время жизни. Тогда вы вполне можете позволить себе выделять память для каждого объекта отдельно. 2) вы часто создаёте и уничтожаете объекты. Тогда вам может быть невыгодно постоянно обращаться к системе за выделением/освобождением памяти - вы можете выделить сразу большую область памяти, и отводить части этой памяти для свежесозданных объектов. При уничтожении вы просто помечаете адрес памяти как неиспользуемый, и не возвращаете память системе до конца работы приложения. Тут можно поуправлять тем, как расширяется, как уплотняется эта область памяти (например, для увеличения вероятности попадания в кэш процессора).
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.02.2012, 00:58  [ТС]     Что такое std::allocator<T> ? #5
Ну принципе что то понятно
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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> ?
Еще ссылки по теме:

std::map что такое и с чем это есть - C++
попытался найти док-ию по map, но так и не нащёл. есть у кого ли нормальная док-ия по Map?

Что означает std в с++? - C++
например, std::cin&gt;&gt;a?

Что означает using namespace std? - C++
Что означает в с++? using namespace std объясните пожалуйста простым языком))

что показывает std::vector::max_size - C++
Returns the maximum number of elements that the vector can hold. но я щяс запускаю на ноутбуке с гигом оперативы for (int i=0; i&lt;1E9;...

Что означает запись std::int? - C++
Подскажите пожалуйста увидела в одном примере перед вектором было std::int я почему то думала что такое не бывает, скажите пожалуйста если...


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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> ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru