![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class segmented_stack_allocatorBoost , Chapter 1. Coroutine , Stack allocation
|
![]() |
Note |
---|---|
Сегментированные стеки в настоящее время поддерживаются толькоgccиз версии4.7иclangиз версии3.4и далее. Для того, чтобы использоватьсегментированный стекBoost.Coroutineдолжен быть построен снабор инструментов = gcc сегментированный стек = нав командной строке b2/bjam. Приложения должны быть скомпилированы с помощью компиляторов-флагов-fsplit-stack -DBOOST_USE_SEGMENTED_STACKS. |
#include <boost/coroutine/segmented_stack_allocator.hpp> template< typename traitsT > struct basic_segmented_stack_allocator { typedef traitT traits_type; void allocate( stack_context &, std::size_t size); void deallocate( stack_context &); } typedef basic_segmented_stack_allocator< stack_traits > segmented_stack_allocator;
void allocate( stack_context
& sctx, std::size_t size)
<traits_type::minimum_size()
<=size
>и<!traits_type::is_unbounded()&&
(traits_type::maximum_size()>=size)
>.
Выделяет память не менее 58 байт и сохраняет указатель на стек и его фактический размер в<sctx
>. В зависимости от архитектуры (стек растет вниз/вверх) сохраненный адрес является самым высоким/самым низким адресом стека.
void deallocate( stack_context
& sctx)
<sctx.sp
>действительно<traits_type::minimum_size()<=sctx.size
>и<!
traits_type::is_unbounded()
&&(
traits_type::maximum_size()
>=sctx.size)
>.
Распределяет пространство стека.
Статья Class segmented_stack_allocator раздела Chapter 1. Coroutine Stack allocation может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Stack allocation ::
реклама |