article

スタック (英語:stack) - 積み重ねること、積み重ねたものの意。

  1. 積重ね、山積み、棚の意味。
  2. 自動車が砂地などで動けなくなること。
  3. 煙突(蒸気機関車、原子力発電所など)
  4. 複数のアンテナを、垂直に一定間隔を置いて配置すること。(水平配列はパラレル(略してパラ)と呼ぶ)
  5. 「プロトコル・スタック」、OSI参照モデルなど、プロトコルが積み重なった論理上の構造図。またそのプロトコルの実装ソフトウェアの集合を言う。 -- 通信プロトコル
  6. Macintoshのオーサリングアプリケーション・HyperCardで記述されたハイパーテキストデータの呼称(カードの集合体から)。
  7. コンピュータデータ構造の一種。本項目で記述。

スタックコンピュータで用いられる基本的なデータ構造の一つで、データを後入れ先出し (LIFO: Last In First Out; FILO: First In Last Out) の構造で保持するものである。

スタックに新たなデータを追加することをプッシュ(push)、データを取り出すことをポップ(pop)といい、最後に追加したデータが一番最初に取り出される。 たとえば、A,B,Cの順番で3個のデータをプッシュした状態でポップを行うと、最初にCが取り出され、続けてポップすればB,Aの順でデータを取り出すことができる。

多くのコンピュータ上ではポインタを用いて実装され、関数呼び出しでの引数渡し、に加えて関数の呼び出し元(caller)アドレスの退避、割り込み発生時のプログラムカウンタ退避、レジスタ退避、などに利用される。またLIFOの特徴から、逆ポーランド記法を用いたプログラミング言語Forthや、MindHewlett-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) | Стек | 堆栈

 

This article is licensed under the GNU Free Documentation License. It uses material from the "スタック".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld