スタック (英語:stack) - 積み重ねること、積み重ねたものの意。
スタックはコンピュータで用いられる基本的なデータ構造の一つで、データを後入れ先出し (LIFO: Last In First Out; FILO: First In Last Out) の構造で保持するものである。
スタックに新たなデータを追加することをプッシュ(push)、データを取り出すことをポップ(pop)といい、最後に追加したデータが一番最初に取り出される。 たとえば、A,B,Cの順番で3個のデータをプッシュした状態でポップを行うと、最初にCが取り出され、続けてポップすればB,Aの順でデータを取り出すことができる。
多くのコンピュータ上ではポインタを用いて実装され、関数呼び出しでの引数渡し、に加えて関数の呼び出し元(caller)アドレスの退避、割り込み発生時のプログラムカウンタ退避、レジスタ退避、などに利用される。またLIFOの特徴から、逆ポーランド記法を用いたプログラミング言語Forthや、Mind、Hewlett-Packardの関数電卓などでも使われている。また、Intel 8087においてはハードウェアがスタック機能を有している。
スタックは必要なデータを順次積んでいくだけでよいので動作効率が非常に良い。一方ポップされない限り深さが増し続けるので、最終的には利用可能な資源を超過してしまう場合がある(スタックオーバーフロー)。特に、データ領域と関数の戻りアドレスを同一スタックに置いている場合、スタックオーバフローを起こして関数の戻り領域を書き換えてしまうと、プログラムのセキュリティホールになる場合がある。
Стэк | Zásobník (informatika) | Stak | Stapelspeicher | Stack (data structure) | Pila (estructura de datos) | Pino | Pile (informatique) | מחסנית (מבנה נתונים) | Verem (számítástechnika) | 스택 | Stekas | Stack | Stos (informatyka) | Стек | Sklad (računalništvo) | Stack (datastruktur) | Стек | 堆栈