A stack-allocator must satisfy the stack-allocator
concept requirements shown in the following table, in which a is an object of a stack-allocator
type, sctx is a stack_context, and size
is a std::size_t:

expression

return type

notes

a(size)

creates a stack allocator

a.allocate()

stack_context

creates a stack

a.deallocate(sctx)

void

deallocates the stack created by a.allocate()

Important

The implementation of allocate() might include logic to protect against
exceeding the context's available stack size rather than leaving it as undefined
behaviour.

Important

Calling deallocate()
with a stack_context not
set by allocate()
results in undefined behaviour.

Note

The stack is not required to be aligned; alignment takes place inside execution_context.

Note

Depending on the architecture allocate() stores an address from the top of the stack
(growing downwards) or the bottom of the stack (growing upwards).