![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class template simple_segregated_storageBoost , Boost.Pool , Header <boost/pool/poolfwd.hpp>
|
Постусловия: |
voidоператор=(const simple_segregated_storage&;
simple_segregated_storage
private static functionsstatic 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 member functionsvoid find_prev(void ptr);
Пересекает свободный список, упомянутый в слове "первый", и возвращает итератор, предшествующий тому, куда "ptr" пошёл бы, если бы он был в свободном списке. Возвращается 0, если "ptr" будет идти в начале бесплатного списка (т.е. перед "первым").
![]() | Примечание |
---|---|
Обратите внимание, что эта функция находит местоположение, предшествующее тому, куда птр пошел бы, если бы он был в свободном списке. Он не находит запись в свободном списке до ptr (если ptr уже не находится в свободном списке). В частности, find_prev(0) вернет 0, а не последнюю запись в бесплатном списке. |
Возврат:
местоположение до того, куда птр пошёл бы, если бы он был в свободном списке.
simple_segregated_storage
protected static functionsstatic void&nextof(voidconst ptr);
Обратное значение составляет всего лишь *ptr отлитый под соответствующий тип. Ptr не должен быть 0. (Для удобства чтения кода :)
В качестве примера предположим, что мы хотим урезать свободный список после первого фрагмента. То есть мы хотим установить *сначала на 0; это приведет к бесплатному списку только с одной записью. Обычный способ сделать это - сначала отлить сначала указатель на указатель на пустоту, а затем отнести и назначить (*static_cast
Возврат: | Указатель с отсылкой. |
simple_segregated_storage
public member functionsvoidconst size_type nsz, size_type npartition_sz;2>
Добавить блок Разделить этот блок и объединить его свободный список в свободный список, указанный в "первом".
пустой() |
voidadd_ordered_block(const block, const size_type nsz, constsize_type size_type npartition_sz;2>
add block (упорядоченный в список) Эта (медленная) версия add_block разделяет блок и объединяет его бесплатный список в наш бесплатный список в правильном порядке.
boolempty()const;
Возврат: | верен только в том случае, если simple_segregated_storage пуст. |
void malloc();
Создать кусок.
Требуется: | !empty() Добавьте «первый» указатель, чтобы указать на следующий кусок. |
void free(voidconst chunk);
Free a chunk.
Требуется: | Куски ранее возвращались из malloc(), ссылаясь на тот же бесплатный список. |
Постусловия: | !пустая() |
voidordered_free(voidconst chunk);
Эта (более медленная) реализация 'free' возвращает память в список в правильном порядке.
Требуется: | Кусок был ранее возвращен из malloc() со ссылкой на тот же бесплатный список |
Постусловия: | !empty(). |
void malloc_n(size_type n, size_type partition_size);
Попытки найти прилежащую последовательность из фрагментов n partition_sz-size. Если они найдены, удалите их все из бесплатного списка и верните указатель на первый. Если не найдено, возвращается 0. Настоятельно рекомендуется (но не обязательно) упорядочить свободный список, так как этот алгоритм не сможет найти непрерывную последовательность, если она не является смежным в свободном списке. Сохранение порядка. O(N) относительно размера бесплатного списка.
voidfree_nconstconst size_type, constconst size_type partition_size;2>
Примечание | Если вы много распределяете/распределяете n, то вам следует использовать упорядоченный пул. |
Требуется:
Куски ранее выделялись из * этого с теми же значениями для n и partition_size.
Постусловия:
!пустая()
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 functionsstatic voidsegregate(, size_type nsz, size_type npartition_sz, void 0;2>
Сегрегированный блок на куски.
Требуется: |
npartition_sz = sizeof(void *) * i, для некоторого целого числа i nsz >= npartition_sz Блок правильно выровнен для массива объекта размера npartition_sz и массива пустоты *. Вышеприведенные требования гарантируют, что любой указатель на кусок (который является указателем на элемент в массиве npartition_sz) может быть отброшен в пустоту **. |
Статья Class template simple_segregated_storage раздела Boost.Pool Header <boost/pool/poolfwd.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Header <boost/pool/poolfwd.hpp> ::
реклама |