|  | Home | Libraries | People | FAQ | More | 
Boost.Context provides the class protected_fixedsize which models the stack-allocator concept. It appends a guard page at the end of each stack to protect against exceeding the stack. If the guard page is accessed (read or write operation) a segmentation fault/access violation is generated by the operating system.
| ![[Important]](../../../../../../../doc/src/images/important.png) | Important | 
|---|---|
| Using protected_fixedsize is expensive. That is, launching a new coroutine with a new stack is expensive; the allocated stack is just as efficient to use as any other stack. | 
| ![[Note]](../../../../../../../doc/src/images/note.png) | Note | 
|---|---|
| 
            The appended  | 
#include <boost/context/protected_fixedsize.hpp> template< typename traitsT > struct basic_protected_fixedsize { typedef traitT traits_type; basic_protected_fixesize(std::size_t size = traits_type::default_size()); stack_context allocate(); void deallocate( stack_context &); } typedef basic_protected_fixedsize< stack_traits > protected_fixedsize
stack_context allocate()
        
                traits_type::minimum:size()
                <= size
                and ! traits_type::is_unbounded() &&
                ( traits_type::maximum:size() >=
                size).
              
                Allocates memory of at least size
                Bytes and stores a pointer to the stack and its actual size in sctx. Depending on the architecture
                (the stack grows downwards/upwards) the stored address is the highest/lowest
                address of the stack.
              
void deallocate( stack_context
          & sctx)
        
                sctx.sp is valid, traits_type::minimum:size() <=
                sctx.size and !
                traits_type::is_unbounded()
                && (
                traits_type::maximum:size()
                >= sctx.size).
              
Deallocates the stack space.