Свой класс для выдедения памяти? использование шаблонов..
От: r1der Россия  
Дата: 06.09.09 19:36
Оценка:
В некоторых книэках употребляется такая штука как собственный класс распределения памяти. где он вообще используется? только в шаблонах я правильно понимаю? есть вот стандартный класс аллокатор.. он используется в STL, а где можно посмотреть как он написан? в какой либе? у меня vs 2008.. что вообще про это имеет смысл прочитать? и в чем вообще суть этих менеджеров распределения памяти? почему бы не использовать new и delete? и еще вопрос .. на каком то форуме сказали что оператор new вызывает cишный оператор malloc(). это так? заранее всем спасибо за ответы.))
icq 314624
Re: Свой класс для выдедения памяти? использование шаблонов.
От: Alexey F  
Дата: 06.09.09 22:57
Оценка:
Здравствуйте, r1der, Вы писали:

R>В некоторых книэках употребляется такая штука как собственный класс распределения памяти. где он вообще используется? только в шаблонах я правильно понимаю?

Ну почему только в них? Можно использовать, в принципе, где угодно и в разных формах, не обязательно шаблонных. А с шаблонами используется обыкновенно из-за возможности оформить аллокатор параметром шаблона.

R>есть вот стандартный класс аллокатор.. он используется в STL, а где можно посмотреть как он написан? в какой либе? у меня vs 2008..

С 2008 особенно не работаю, но загляните в include\xmemory — кажется, он (allocator) лежит там.

R>что вообще про это имеет смысл прочитать? и в чем вообще суть этих менеджеров распределения памяти? почему бы не использовать new и delete?

Суть в возможности задания своего способа выделения памяти. Это может быть, например, выделение памяти из заранее заготовленного пула. Для оптимизации скорости, оптимизации использования памяти и т.п.
Переопределённые new (не размещающий) и delete для классов, помимо выделения памяти, инициализируют объект, что может быть неприемлимо.

R>и еще вопрос .. на каком то форуме сказали что оператор new вызывает cишный оператор malloc(). это так? заранее всем спасибо за ответы.))

Во многих реализациях вызов new сводится к malloc с последующей инициализацией, если необходимо. А delete — к вызову деструктора и free. Это — детали реализации, вполне может оказаться, что другой компилятор использует HeapAlloc или сам, "вручную", управляет памятью
Re[2]: Свой класс для выдедения памяти? использование шаблон
От: r1der Россия  
Дата: 07.09.09 03:49
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Здравствуйте, r1der, Вы писали:


R>>В некоторых книэках употребляется такая штука как собственный класс распределения памяти. где он вообще используется? только в шаблонах я правильно понимаю?

AF>Ну почему только в них? Можно использовать, в принципе, где угодно и в разных формах, не обязательно шаблонных. А с шаблонами используется обыкновенно из-за возможности оформить аллокатор параметром шаблона.

R>>есть вот стандартный класс аллокатор.. он используется в STL, а где можно посмотреть как он написан? в какой либе? у меня vs 2008..

AF>С 2008 особенно не работаю, но загляните в include\xmemory — кажется, он (allocator) лежит там.

R>>что вообще про это имеет смысл прочитать? и в чем вообще суть этих менеджеров распределения памяти? почему бы не использовать new и delete?

AF>Суть в возможности задания своего способа выделения памяти. Это может быть, например, выделение памяти из заранее заготовленного пула. Для оптимизации скорости, оптимизации использования памяти и т.п.
AF>Переопределённые new (не размещающий) и delete для классов, помимо выделения памяти, инициализируют объект, что может быть неприемлимо.

R>>и еще вопрос .. на каком то форуме сказали что оператор new вызывает cишный оператор malloc(). это так? заранее всем спасибо за ответы.))

AF>Во многих реализациях вызов new сводится к malloc с последующей инициализацией, если необходимо. А delete — к вызову деструктора и free. Это — детали реализации, вполне может оказаться, что другой компилятор использует HeapAlloc или сам, "вручную", управляет памятью


а что по поводу памяти?? как реализуется?? я так понимаю выделяется большой кусок памяти который потом перераспределеяется прогой? как такое делать? ведь при любом выделении памяти она инициализируется.
icq 314624
Re[3]: Свой класс для выдедения памяти? использование шаблон
От: Pavel Dvorkin Россия  
Дата: 07.09.09 05:09
Оценка:
Здравствуйте, r1der, Вы писали:

R>а что по поводу памяти?? как реализуется?? я так понимаю выделяется большой кусок памяти который потом перераспределеяется прогой?


У меня, например, была ситуация, когда много объектов создается и ничего не удаляется, после чего они удаляются все. В этой ситуации я с помощью VirtualAlloc выделял большой блок памяти, после чего просто последовательно писал туда данные, одно за другим, продвигая указатель. После весь блок, выделенный VirtualAlloc уничтожал целиком, не думая об его структуре.

>как такое делать? ведь при любом выделении памяти она инициализируется.


Инициализирует ее конструктор класса.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.