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

Class unsynchronized_pool_resource

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Boost.Container Header Reference

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 unsynchronized_pool_resource

boost::container::pmr::unsynchronized_pool_resource

Synopsis

// In header: <boost/container/pmr/unsynchronized_pool_resource.hpp>

class unsynchronized_pool_resource :
  public boost::container::pmr::memory_resource
{
public:
  // construct/copy/destruct
  unsynchronized_pool_resource(const pool_options &, memory_resource *) noexcept;
  unsynchronized_pool_resource() noexcept;
  explicit unsynchronized_pool_resource(memory_resource *) noexcept;
  explicit unsynchronized_pool_resource(const pool_options &) noexcept;
  unsynchronized_pool_resource(const unsynchronized_pool_resource &) = delete;
  unsynchronized_pool_resource 
  operator=(const unsynchronized_pool_resource &) = delete;
  ~unsynchronized_pool_resource();
  // public member functions
  void release();
  memory_resource * upstream_resource() const;
  pool_options options() const;
  std::size_t pool_count() const;
  std::size_t pool_index(std::size_t) const;
  std::size_t pool_next_blocks_per_chunk(std::size_t) const;
  std::size_t pool_block(std::size_t) const;
  std::size_t pool_cached_blocks(std::size_t) const;
  // protected member functions
  virtual void * do_allocate(std::size_t, std::size_t);
  virtual void do_deallocate(void *, std::size_t, std::size_t);
  virtual bool do_is_equal(const memory_resource &) const noexcept;
};

Description

Aunsynchronized_pool_resourceявляется универсальным ресурсом памяти, обладающим следующими качествами:

  • Каждый ресурс владеет выделенной памятью и освобождает её от разрушения, даже если для некоторых выделенных блоков не был вызван деллокат.

  • Ресурс пула состоит из набора пулов, обслуживающих запросы на различные размеры блоков. Каждый отдельный бассейн управляет коллекцией кусков, которые в свою очередь делятся на блоки однородного размера, возвращаемые с помощью вызовов do_allocate. Каждый вызов do_allocate (размер, выравнивание) отправляется в пул, обслуживающий наименьшие блоки, вмещающие по меньшей мере байты размера.

  • Когда конкретный бассейн исчерпан, выделение блока из этого бассейна приводит к выделению дополнительного куска памяти из распределителя вверх по течению (поставляемого при строительстве), таким образом пополняя бассейн. С каждым последующим пополнением полученный размер куска увеличивается геометрически. [Примечание: распределяя память по частям, стратегия объединения увеличивает вероятность того, что последовательные распределения будут близки друг к другу в памяти. - конец примечания ]

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

  • Структураpool_optionsможет быть передана конструкторам ресурсов пула для настройки наибольшего размера блока и максимального размера фрагмента.

Классunsynchronized_pool_resourceне может быть доступен из нескольких потоков одновременно и, таким образом, позволяет избежать стоимости синхронизации полностью в однопоточных приложениях.

unsynchronized_pool_resource public construct/copy/destruct

  1. unsynchronized_pool_resourceconstpool_options&opts,memory_resource*upstream]без исключения;

    Требует:вверх по течениюявляется адресом действительного ресурса памяти.

    Эффекты: Конструирует объект ресурса пула, который будет получать память из верхнего потока, когда ресурс пула не может удовлетворить запрос памяти из своих собственных внутренних структур данных. Полученный объект будет содержать копию выше по течению, но не будет владеть ресурсом, на который выше по течению указывает. [Примечание: Цель состоит в том, чтобы в большинстве случаев призывы к upstream->allocate() были значительно меньше, чем призывы к this->allocate(). - Конечная нота Поведение механизма объединения настраивается в соответствии с ценностью аргумента выбора.

    Бросает: Ничего, кроме бросков вверх по течению. Не уточняется, если или при каких условиях этот конструктор называет upstream->allocate().

  2. unsynchronized_pool_resource;

    Эффекты: То же самое, чтоunsynchronized_pool_resource(pool_options(), get_default_resource())

  3. эксплицитнонесинхронизированный_pool_resourceпамять_resource*выше по течению;

    Эффекты: Аналогичноunsynchronized_pool_resource(pool_options(), upstream).

  4. эксплицитнонесинхронизированный_pool_resourceconstpool_options&opts]без исключения;

    Эффекты: Аналогичноunsynchronized_pool_resource(opts, get_default_resource()).

  5. unsynchronized_pool_resourceconstunsynchronized_pool_resource&]=удалить;
  6. unsynchronized_pool_resourceоператор=constunsynchronized_pool_resource&]удалить;
  7. ~unsynchronized_pool_resource();

    Эффекты: Звонкиthis->release().

unsynchronized_pool_resource public member functions

  1. voidrelease();

    Эффекты: Звонки звонятupstream_resource()->deallocate()при необходимости освободить всю выделенную память. [Примечание: память высвобождается обратно вupstream_resource(), даже если для некоторых выделенных блоков не было вызвано расслоение. - конец примечания ]

  2. memory_resource*upstream_resource()const;

    Возвращение: Значение аргумента восходящего потока предоставлено конструктору этого объекта.

  3. pool_options]const;

    Возврат: Варианты, которые контролируют поведение пула этого ресурса. Значения в возвращенной структуре могут отличаться от тех, которые поставляются в конструктор ресурсов пула, в том смысле, что значения нуля будут заменены по умолчанию, определенными реализацией, а размеры могут быть округлены до неопределенной детализации.

  4. std::size_tpool_countconst;

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

    Примечание: Нестандартное расширение.

  5. std::size_tpool_index(std::size_tbytes)const;

    Возвращение: Индекс пула, который будет использоваться для обслуживания распределенияbytes. Возвращаетсяpool_count(), еслиbytesбольшеoptions().largest_required_pool_block(ни один бассейн не будет использоваться для этого).

    Примечание: Нестандартное расширение.

  6. std::size_tpool_next_blocks_per_chunk(std::size_tpool_idx)const;

    Требуется:pool_idx < pool_index()

    Возвращение: Число блоков, которые будут выделены в следующем куске из пула, указанногоpool_idx.

    Примечание: Нестандартное расширение.

  7. std::size_tpool_block(std::size_tpool_idx)const;

    Требуется:pool_idx < pool_index()

    Возвращение: Количество байтов блока, которым управляет указанныйpool_idxпул.

    Примечание: Нестандартное расширение.

  8. std::size_tpool_cached_blocks(std::size_tpool_idx)const;

    Требуется:pool_idx < pool_index()

    Возвращение: Количество блоков, которые указанный пулpool_idxкэшировал и будет обслуживаться без вызова upstream_allocator.

    Примечание: Нестандартное расширение.

unsynchronized_pool_resource protected member functions

  1. виртуальныйпустотаdo_allocatestd::размер_tбайт,std::размер_tвыравнивание;

    Возвращение: Указатель на выделенное хранилище размером не менеебайт. Размер и расположение выделенной памяти должны соответствовать требованиям для класса, полученного изMemory_resource.

    Эффекты: Если пул, выбранный для блока байтов размера, не может удовлетворить запрос памяти из собственных внутренних структур данных, он вызоветupstream_resource()->allocate(), чтобы получить больше памяти. Еслибайтбольше того, что может обрабатывать самый большой пул, то память будет выделена с использованиемupstream_resource()->allocate().

    Бросок: Ничего, кромеupstream_resource()->allocate()throws.

  2. виртуальныйпустотаdo_deallocateпустотар,stdразмер_tбайты,stdвыравниваниеразмер_t;

    Эффекты: Верните память на p в бассейн. Не уточняется, приведет ли эта операция к вызовуupstream_resource()->deallocate().

    Бросает: Ничего.

  3. виртуальныйbooldo_is_equalconstmemory_resource&другой]constне исключение;

    Возвращение:это == динамическая_cast(&other)


PrevUpHomeNext

Статья Class unsynchronized_pool_resource раздела The Boost C++ Libraries BoostBook Documentation Subset Boost.Container Header Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Boost.Container Header Reference ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:23:51/0.030097007751465/1