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

Class monotonic_buffer_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 monotonic_buffer_resource

boost::container::pmr::monotonic_buffer_resource

Synopsis

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

class monotonic_buffer_resource :
  public boost::container::pmr::memory_resource
{
public:
  // construct/copy/destruct
  explicit monotonic_buffer_resource(memory_resource * = 0) noexcept;
  explicit monotonic_buffer_resource(std::size_t, memory_resource * = 0) noexcept;
  monotonic_buffer_resource(void *, std::size_t, memory_resource * = 0) noexcept;
  monotonic_buffer_resource(const monotonic_buffer_resource &) = delete;
  monotonic_buffer_resource 
  operator=(const monotonic_buffer_resource &) = delete;
  ~monotonic_buffer_resource();
  // public member functions
  void release() noexcept;
  memory_resource * upstream_resource() const noexcept;
  std::size_t remaining_storage(std::size_t, std::size_t &) const noexcept;
  std::size_t remaining_storage(std::size_t = 1u) const noexcept;
  const void * current_buffer() const noexcept;
  std::size_t next_buffer_size() const noexcept;
  // protected member functions
  virtual void * do_allocate(std::size_t, std::size_t);
  virtual void do_deallocate(void *, std::size_t, std::size_t) noexcept;
  virtual bool do_is_equal(const memory_resource &) const noexcept;
  // public data members
  static const std::size_t initial_next_buffer_size;
};

Description

Amonotonic_buffer_resourceявляется специализированным ресурсом памяти, предназначенным для очень быстрого распределения памяти в ситуациях, когда память используется для создания нескольких объектов, а затем высвобождается сразу, когда объект ресурса памяти разрушается. Он обладает следующими качествами:

  • Призыв к расщеплению не имеет эффекта, поэтому количество потребляемой памяти монотонно увеличивается до тех пор, пока ресурс не будет уничтожен.

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

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

  • Он предназначен для доступа из одного потока управления за раз. В частности, призывы к выделению и размещению не синхронизируются друг с другом.

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

monotonic_buffer_resource public construct/copy/destruct

  1. explicitmonotonic_buffer_resource(memory_resource*upstream=0)noexcept;

    Требуется:upstreamдолжен быть адресом действительного ресурса памяти илиnullptr

    Эффекты: Еслиupstreamне является nullptr, установит внутренний ресурс наupstream, чтобы получить _default_resource() в противном случае. Устанавливает внутреннийcurrent_bufferкnullptrи внутреннийnext_buffer_sizeк определенному размеру реализации.

  2. эксплицитныймонотонный_буфер_ресурсstd::размер_tначальный_размер,память_ресурс*восходящий=0]без исключения;

    Требует:upstreamдолжен быть адресом действительного ресурса памяти илиnullptrиначальный размердолжен быть больше нуля.

    Эффекты: Еслиupstreamне является nullptr, установит внутренний ресурс наupstream, чтобы получить_default_resource() в противном случае. Устанавливает внутреннийcurrent_bufferнаnullptrиnext_buffer_sizeкак минимум наinitial_size.

  3. монотонный_буфер_ресурспустойбуфер,std::размер_tбуфер_размер,память_ресурс*выше по течению=0, кроме;
    :выше по течению,буфер_размердолжен быть не больше количества байтов в буфере.

    Эффекты: Еслиupstreamне является nullptr, установит внутренний ресурс наupstream, чтобы получить_default_resource() в противном случае. Устанавливает внутреннийток_буфернабуфер, аследующий_буфер_sizeнабуфер_size(но не менее, чем размер, определенный реализацией), затем увеличиваетследующий_буфер_sizeпосредством определяемого реализацией фактора роста (который не обязательно должен быть интегральным).

  4. monotonic_buffer_resourceconstmonotonic_buffer_resource&]=удалить;
  5. монотонный_буфер_ресурсоператор=констмонотонный_буфер_ресурс&]=удалить;
  6. ~monotonic_buffer_resource();

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

monotonic_buffer_resource public member functions

  1. voidrelease()noexcept;

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

  2. memory_resource*upstream_resource()constnoexcept;

    Возвращение: Ценность внутреннего ресурса.

  3. std::size_tremaining_storage(std::size_talignment,
                                 std::size_t&wasted_due_to_alignment)constnoexcept;

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

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

  4. std::size_tremaining_storage(std::size_talignment=1u)constnoexcept;

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

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

  5. constvoid*current_buffer()constnoexcept;

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

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

  6. std::size_tnext_buffer_size()constnoexcept;

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

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

monotonic_buffer_resource protected member functions

  1. virtualvoid*do_allocate(std::size_tbytes,std::size_talignment);

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

    : Если неиспользуемое пространство во внутреннемcurrent_bufferможет поместить блок с указанными байтами и выравниванием, то выделите возвратный блок из внутреннегоcurrent_buffer; в противном случае установите внутреннийcurrent_bufferвupstream_resource()->allocate(n, m), гдеnне меньшеmax(bytes, next_buffer_size)иmне меньше выравнивания, и увеличьтеnext_buffer_sizeпосредством определяемого реализацией фактора роста (который не обязательно должен быть интегральным), затем выделите возвратный блок из вновь выделенного внутреннегоcurrent_buffer

    Бросок: Ничего, если толькоupstream_resource()->allocate()не бросит.

  2. виртуальнаяпустотапустотаstd::размер_tбайты,размер_tвыравниваниене исключение;
    Эффекты

    : Ничто

    Замечания: Память, используемая этим ресурсом, монотонно возрастает до его разрушения.

  3. virtualbooldo_is_equal(constmemory_resource&other)constnoexcept;

    Возвращение:this == dynamic_cast<const monotonic_buffer_resource*>(&other)

monotonic_buffer_resource public public data members

  1. staticconststd::size_tinitial_next_buffer_size;

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

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


PrevUpHomeNext

Статья Class monotonic_buffer_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:35:40/0.010231018066406/1