![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Stack allocationBoost , Chapter 1. Fiber , Chapter 1. Fiber
|
выражение |
тип возврата |
примечания |
---|---|---|
|
creates a stack allocator |
|
|
создает стек |
|
|
|
deallocates the stack created by |
![]() |
Important |
---|---|
Реализация |
![]() |
Important |
---|---|
Призыв |
![]() |
Note |
---|---|
Память для стека не требуется для выравнивания; выравнивание происходит внутри execution_context. |
См. также Boost.Context tab allocation. В частности, методы traits_type
описаны для boost::context::stack_traits
.
protected_fixedsize_stack
Boost.Fiber предоставляет класс protected_fixedsize_stack
, который моделирует концепцию stack-allocator. Он добавляет страницу охраны в конце каждого стека, чтобы защитить от превышения стека. Если к охранной странице имеется доступ (операция чтения или записи), то нарушение сегментации/доступа генерируется операционной системой.
![]() |
Important |
---|---|
Использование |
![]() |
Note |
---|---|
Приложение |
#include <boost/fiber/protected_fixedsize.hpp> namespace boost { namespace fibers { struct protected_fixedsize { protected_fixesize(std::size_t size = traits_type::default_size()); stack_context allocate(); void deallocate( stack_context &); } }}
allocate
()
stack_context allocate();
traits_type::minimum_size() <= размер
и traits_type::2>s_unbounded()>>>> traits_type>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><1>>>>>>>>>>>>>>>.
Аллоцирует память по крайней мере размер
байты и сохраняет указателей на стек и его фактический размер в sctx
. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/низким адресом стека.
deallocate
()
void deallocate( stack_context & sctx);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Распределяет пространство стека.
pooled_fixedsize_stack
Boost.Fiber предоставляет класс pooled_fixedsize_stack
, который моделирует концепцию stack-allocator. В отличие от protected_fixedsize_stack
он не добавляет страницу охраны в конце каждого стека. Память управляется внутри boost::pool<>
.
#include <boost/fiber/pooled_fixedsize_stack.hpp> namespace boost { namespace fibers { struct pooled_fixedsize_stack { pooled_fixedsize_stack(std::size_t stack_size = traits_type::default_size(), std::size_t next_size = 32, std::size_t max_size = 0); stack_context allocate(); void deallocate( stack_context &); } }}
pooled_fixedsize_stack(std::size_t stack_size, std::size_t next_size, std::size_t max_size);
traits_type::is_unbounded() || ( traits_type::maximum_size() >= stack_size и
0 < n>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Аллоцирует память по крайней мере stack_size
байты и хранит указателей на стек и его фактический размер в sctx
. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/низким адресом стека. Аргумент next_size
определяет количество стек для запроса из системы в первый раз, что *этот
должен выделить системную память. Третий аргумент max_size
контролирует, сколько памяти может быть выделено для стек — значение нуля не означает верхнего предела.
allocate
()
stack_context allocate();
traits_type::is_unbounded() || ( traits_type::maximum_size() >= stack_size)
.
Аллоцирует память по крайней мере stack_size
байты и хранит указателей на стек и его фактический размер в sctx
. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/низким адресом стека.
deallocate
()
void deallocate( stack_context & sctx);
sctx.sp
является действительным, traits_type::максимум() <3&2> ( traits_type::максимум_размер() >2> sctx>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Распределяет пространство стека.
![]() |
Note |
---|---|
Этот аллокатор стека не безопасен. |
fixedsize_stack
Boost.Fiber предоставляет класс fixedsize_stack
, который моделирует концепцию stack-allocator. В отличие от protected_fixedsize_stack
он не добавляет страницу охраны в конце каждого стека. Память просто управляется std::malloc()
и std::free<321>()
.
#include <boost/context/fixedsize_stack.hpp> namespace boost { namespace fibers { struct fixedsize_stack { fixedsize_stack(std::size_t size = traits_type::default_size()); stack_context allocate(); void deallocate( stack_context &); } }}
allocate
()
stack_context allocate();
traits_type::minimum_size() <= размер
и traits_type::2>_максимум>>>>>>>>>>>>>>>.
Аллоцирует память по крайней мере размер
байты и сохраняет указателей на стек и его фактический размер в sctx
. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/низким адресом стека.
deallocate
()
void deallocate( stack_context & sctx);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Распределяет пространство стека.
segmented_stack
Boost.Fiber поддерживает использование segmented_stack
, т.е. стек растет по требованию. Клетчатка создается с минимальным размером стека, который будет увеличен по мере необходимости. Класс segmented_stack
модели stack-allocator концепция<37>. В отличие от protected_fixed_size_stack
и fixedsize_stack
он создает стек, который растет по требованию.
![]() |
Note |
---|---|
Сегментированные стеки в настоящее время поддерживаются только gcc от версии 4.7 и clang от версии 3.4. Для того, чтобы использовать |
#include <boost/fiber/segmented_stack.hpp> namespace boost { namespace fibers { struct segmented_stack { segmented_stack(std::size_t stack_size = traits_type::default_size()); stack_context allocate(); void deallocate( stack_context &); } }}
allocate
()
stack_context allocate();
traits_type::minimum_size() <= размер
и traits_type::2>_максимум>>>>>>>>>>>>>>>.
Аллоцирует память по крайней мере размер
байты и сохраняет указателей на стек и его фактический размер в sctx
. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/низким адресом стека.
deallocate
()
void deallocate( stack_context & sctx);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Распределяет пространство стека.
![]() |
Note |
---|---|
Если библиотека составлена для сегментированных стек, то |
Статья Stack allocation раздела Chapter 1. Fiber Chapter 1. Fiber может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 1. Fiber ::
реклама |