Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template object_pool

Boost , Boost.Pool , Header <boost/pool/poolfwd.hpp>

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template object_pool

boost::object_pool — A template class that can be used for fast and efficient memory allocation of objects. It also provides automatic destruction of non-deallocated objects.

Synopsis

// In header: <boost/pool/poolfwd.hpp>
template<typename T, 
         typename UserAllocator = default_user_allocator_new_delete> 
class object_pool : protected boost::pool< UserAllocator > {
public:
  // construct/copy/destruct
  explicit object_pool(const size_type = 32, const size_type = 0);
  ~object_pool();
  // protected member functions
  pool< UserAllocator > & store();
  const pool< UserAllocator > & store() const;
  // protected static functions
  static void *& nextof(void *const);
  // public member functions
  element_type * malloc();
  void free(element_type *const);
  bool is_from(element_type *const) const;
  element_type * construct();
  template<typename Arg1, ...class ArgN> 
    element_type * construct(Arg1 &, ...ArgN &);
  void destroy(element_type *const);
  size_type get_next_size() const;
  void set_next_size(const size_type);
};

Description

TТип объекта для выделения/выделения. Т должен иметь небросающий деструктор.

ПользовательОпределяет распределитель, который базовый пул будет использовать для выделения памяти из системы. Видишь?Распределители пользователейдля деталей.

Классobject_pool— это класс шаблонов, который можно использовать для быстрого и эффективного распределения памяти объектов. Он также обеспечивает автоматическое уничтожение неразрушенных объектов.

Когда объектный пул разрушается, то деструктор для типа Т вызывается для каждого выделенного Т, который еще не был размещён. O(N).

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

object_pool public construct/copy/destruct

  1. <
    explicitobject_pool(constsize_typearg_next_size=32,
                        constsize_typearg_max_size=0);
    >

    Построение нового (пустого по умолчанию) ObjectPool.

    Next_size != 0.

    Требует:

  2. <
    ~object_pool();
    >

object_pool protected member functions

  1. <
    pool<UserAllocator>&store();
    >

    Возвращение:

    Основной прирост:бассейнхранилище, используемое * этим.

  2. <
    constpool<UserAllocator>&store()const;
    >

    Возвращение:

    Основной прирост:бассейнхранилище, используемое * этим.

object_pool protected static functions

  1. <
    staticvoid*&nextof(void*constptr);
    >

    Возвращение:

    Следующий блок памяти после ptr (ради читабельности кода :)

object_pool public member functions

  1. <
    element_type*malloc();
    >

    Выделяет память, способную удерживать один объект типа ElementType.

    Если память не работает, возвращается 0.

    Амортизированный O(1).

  2. <
    voidfree(element_type*constchunk);
    >

    Распределяет память, которая содержит фрагмент типа ElementType.

    Обратите внимание, что p не может быть 0.
    Обратите внимание, что деструктор для p не вызывается. O(N).

  3. <
    boolis_from(element_type*constchunk)const;
    >

    Возврат ложный, если кусок был выделен из какого-либо другого пула или может быть возвращен в результате будущего распределения из какого-либо другого пула.

    В противном случае возвращаемое значение бессмысленно.

    [Note]Примечание

    Эта функция НЕ может использоваться для надежного тестирования значений случайных указателей!

    Возврат:

    верно, если кусок был выделен из * этого или может быть возвращен в результате будущего распределения из * этого.

  4. <
    element_type*construct();
    >

    Возвращает:

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

  5. <
    template<typenameArg1,...classArgN>
     element_type*construct(Arg1&,...ArgN&);
    >

    [Note]Примечание

    Поскольку число и тип аргументов для этой функции совершенно произвольны, была настроена простая система для автоматического создания функций построения шаблонов. Эта система основана на макропроцессоре m4, который является стандартным для систем UNIX, а также доступен для систем Win32.

    Detail/pool_construct.m4, при запуске с m4, будет создавать файл Detail/pool_construct.ipp, который только определяет функции построения для правильного количества аргументов. Количество аргументов может быть передано в файл в виде макроса m4, NumberOfArguments; если не предусмотрено, он будет по умолчанию 3.

    Для каждого различного числа аргументов (от 1 до NumberOfArguments) генерируется функция шаблона. Существует такое же количество параметров шаблона, как и аргументов, и тип каждого аргумента является ссылкой на этот (возможно, cv-квалифицированный) аргумент шаблона. Также генерируется каждая возможная перестановка квалификаций cv.

    Поскольку каждая перестановка генерируется для каждого возможного числа аргументов, размер файла растет экспоненциально с точки зрения количества аргументов конструктора, а не линейно. Для рационального составления времен используйте только столько аргументов, сколько вам нужно.

    Detail/pool_construct.bat и Detail/pool_construct.sh также предоставляются для вызова m4, определяя NumberOfArguments как их параметр командной строки. Посмотрите эти файлы для более подробной информации.

    Возврат:

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

  6. <
    voiddestroy(element_type*constchunk);
    >

    Уничтожает объект, выделенный конструкцией.

    Эквивалентно:

    p->~ElementType(); this->free(p);

    Требуется:

    p должно быть предварительно выделено из * этого посредством вызова на конструкцию.

  7. <
    size_typeget_next_size()const;
    >

    Возвращение:

    Количество кусков, которые будут выделены в следующий раз, когда у нас закончится память.

  8. <
    voidset_next_size(constsize_typex);
    >

    Установите новое количество кусков, чтобы выделить в следующий раз, когда у нас закончится память.

    Параметры:

    <x>

    хотели следующего размера (не должно быть нуля).


PrevUpHomeNext

Статья Class template object_pool раздела Boost.Pool Header <boost/pool/poolfwd.hpp> может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Header <boost/pool/poolfwd.hpp> ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 22:40:23/0.0078580379486084/0