スタック割り当て
スタックにより使われるメモリーは、コンセプトに従っているスタックアロケーターにより割り当て/割り当て解除が行われます。
スタックアロケーターコンセプト
スタックアロケーターは、以下の表で示されるスタックアロケーターコンセプトを満たす必要があります。aはスタックアロケーター型のオブジェクトを指し、sctxはstack_contextで、sizeはstd::size_tです。
| 式 | 戻り値型 | 注釈 |
|---|---|---|
a(size) |
スタックアロケーターを作成します | |
a.allocate() |
stack_context |
スタックを作成します |
a.deallocate(sctx) |
void |
a.allocate()により作成されたスタックの割り当てを解除します |
重要
allocate()の実装は、コンテキストの使用可能なスタックサイズを超過した場合を未定義動作として放置するのではなく、何らかの防御ロジックを組み込んでいるかもしれません。
重要
deallocate()をallocate()によるものでないstack_contextで呼び出した場合の結果は未定義動作です。
注釈
スタックがアラインされる必要はありません。アラインメントはexecution_contextの内部で行われます。
注釈
allocate()がアドレスを、スタックの頂上から(下に向かって)確保するか、底から(上に向かって)確保するかは、アーキテクチャに依存します。