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

Class template simple_segregated_storage

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 simple_segregated_storage

boost::simple_segregated_storage — Simple Segregated Storage is the simplest, and probably the fastest, memory allocation/deallocation algorithm. It is responsible for partitioning a memory block into fixed-size chunks: where the block comes from is determined by the client of the class.

Synopsis

// In header: <boost/pool/poolfwd.hpp>
template<typename SizeType = std::size_t> 
class simple_segregated_storage {
public:
  // construct/copy/destruct
  simple_segregated_storage(const simple_segregated_storage &);
  simple_segregated_storage();
  void operator=(const simple_segregated_storage &);
  // private static functions
  static void * try_malloc_n(void *&, size_type, size_type);
  // protected member functions
  void * find_prev(void *);
  // protected static functions
  static void *& nextof(void *const);
  // public member functions
  void add_block(void *const, const size_type, const size_type);
  void add_ordered_block(void *const, const size_type, const size_type);
  bool empty() const;
  void * malloc();
  void free(void *const);
  void ordered_free(void *const);
  void * malloc_n(size_type, size_type);
  void free_n(void *const, const size_type, const size_type);
  void ordered_free_n(void *const, const size_type, const size_type);
  // public static functions
  static void * segregate(void *, size_type, size_type, void * = 0);
};

Description

Класс шаблонов simple_segregated_storage управляет доступом к свободному списку фрагментов памяти. Обратите внимание, что это очень простой класс, с предпосылками практически на все его функции. Он предназначен для того, чтобы быть самым быстрым и наименьшим из возможных быстрораспределителей памяти, например, что-то, что можно использовать во встроенных системах. Этот класс делегирует много сложных предварительных условий пользователю (т.е. проблемы выравнивания).

Объект типа simple_segregated_storage пуст, если свободный список пуст. Если он не пустой, то заказывается, если заказывается его бесплатный список. Бесплатный список упорядочен, если повторные вызовы malloc() приводят к постоянно увеличивающейся последовательности значений, определяемой std::less. Функция-член сохраняет порядок, если свободный список сохраняет ориентацию порядка (то есть упорядоченный свободный список все еще упорядочен после вызова функции-члена).

simple_segregated_storage public construct/copy/destruct

  1. simple_segregated_storage(const simple_segregated_storage &;
  2. simple_segregated_storage;

    Строить пустую зону хранения.

    Постусловия:

  3. voidоператор=(const simple_segregated_storage&;

simple_segregated_storage private static functions

  1. static void & start, size_type n, size_type partition_size; 

    (n>0), (nextof(start)!= 0)

    Постусловия:

    (начните!= 0) Функция пытается найти n смежных кусков размера partition_size в свободном списке, начиная с начала. Если она увенчалась успехом, то возвращает последний кусок в этой прилежащей последовательности, так что последовательность познается [стартом, {retval}]. Если это не удается, он делает это либо потому, что он находится в конце бесплатного списка, либо попадает в несмежную часть. В любом случае он вернет 0 и установит старт до последнего рассматриваемого куска. Вы находитесь в конце бесплатного списка, если nextof(старт) == В противном случае начальные точки указывают на последний кусок в смежной последовательности, а последующие (начальные) указывают на первый кусок в следующей смежной последовательности (при условии упорядоченного свободного списка).

Возврат:

местоположение до того, куда птр пошёл бы, если бы он был в свободном списке.

simple_segregated_storage protected static functions

  1. static void&nextof(voidconst ptr);

    Обратное значение составляет всего лишь *ptr отлитый под соответствующий тип. Ptr не должен быть 0. (Для удобства чтения кода :)

    В качестве примера предположим, что мы хотим урезать свободный список после первого фрагмента. То есть мы хотим установить *сначала на 0; это приведет к бесплатному списку только с одной записью. Обычный способ сделать это - сначала отлить сначала указатель на указатель на пустоту, а затем отнести и назначить (*static_cast(first) = 0;). Это можно сделать более легко с помощью этой функции удобства (nextof(first) = 0;).

    Возврат:

    Указатель с отсылкой.

simple_segregated_storage public member functions

  1. voidconst size_type  nsz,  size_type  npartition_sz;2>

    Добавить блок Разделить этот блок и объединить его свободный список в свободный список, указанный в "первом".

    пустой()

  2. voidadd_ordered_block(const block, const size_type nsz, constsize_type size_type npartition_sz;2>

    add block (упорядоченный в список) Эта (медленная) версия add_block разделяет блок и объединяет его бесплатный список в наш бесплатный список в правильном порядке.

  3. boolempty()const;

    Возврат:

    верен только в том случае, если simple_segregated_storage пуст.

  4. void malloc();

    Создать кусок.

    Требуется:

    !empty() Добавьте «первый» указатель, чтобы указать на следующий кусок.

  5. void free(voidconst chunk);

    Free a chunk.

    Требуется:

    Куски ранее возвращались из malloc(), ссылаясь на тот же бесплатный список.

    Постусловия:

    !пустая()

  6. voidordered_free(voidconst chunk);

    Эта (более медленная) реализация 'free' возвращает память в список в правильном порядке.

    Требуется:

    Кусок был ранее возвращен из malloc() со ссылкой на тот же бесплатный список

    Постусловия:

    !empty().

  7. void malloc_n(size_type n, size_type partition_size);

    Попытки найти прилежащую последовательность из фрагментов n partition_sz-size. Если они найдены, удалите их все из бесплатного списка и верните указатель на первый. Если не найдено, возвращается 0. Настоятельно рекомендуется (но не обязательно) упорядочить свободный список, так как этот алгоритм не сможет найти непрерывную последовательность, если она не является смежным в свободном списке. Сохранение порядка. O(N) относительно размера бесплатного списка.

  8. voidfree_nconstconst size_type, constconst size_type partition_size;2>

    Примечание

    Если вы много распределяете/распределяете n, то вам следует использовать упорядоченный пул.

    Требуется:

    Куски ранее выделялись из * этого с теми же значениями для n и partition_size.

    Постусловия:

    !пустая()

  9. void ordered_free_nconst chunks, const size_type, constsize_type partition_size;2>

    Free n chunks из списка заказов.

    Требуется:

    Куски ранее выделялись из * этого с одинаковыми значениями для n и размера раздела.

    n не должен быть нулевым (n == 0 не имеет эффекта).

simple_segregated_storage public static functions

  1. static voidsegregate(, size_type nsz, size_type npartition_sz, void 0;2>

    Сегрегированный блок на куски.

    Требуется:

    npartition_sz = sizeof(void *) * i, для некоторого целого числа i

    nsz >= npartition_sz

    Блок правильно выровнен для массива объекта размера npartition_sz и массива пустоты *. Вышеприведенные требования гарантируют, что любой указатель на кусок (который является указателем на элемент в массиве npartition_sz) может быть отброшен в пустоту **.


PrevUpHomeNext

Статья Class template simple_segregated_storage раздела 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-07-04 20:57:01/0.0080058574676514/0