スタック
読み:スタック
外語:stack

 最後に格納したものが真っ先に取り出される形式(LIFO)によるデータの格納方法のこと。英語で積み重ねること。
目次

概要
 スタックは、本を積み重ねるような構造である。
 新しいデータは上に重ね、取り出す時は上から順に出てくるようなスタイルの構造をなす。
 

特徴

CISC/RISC
 CISCタイプのマイクロプロセッサーでは、レジスターの内容の保管に用いたり、他のプログラムを呼び出す際に現在実行中のアドレスを保管しておいたりする際に利用している。
 RISCでは、高速化のためにスタックの機能を持っていないものもある。

メモリー
 スタックはメインメモリーの一部を利用し、その位置はCPUのレジスターであるスタックポインターによって示されるのが一般的である。従って、スタックの大きさは有限であり、格納できるデータの総量は決まっている。
 しかしプログラムのバグなどで規定の大きさを超える量のデータをスタックに積んでしまった場合、別のメモリー領域を破壊してしまうことになる。これをスタックオーバーフロー(スタックあふれ)と呼ぶ。

実装

スタックポインター
 一般的な実装では、スタックに使うメモリー領域をまず決め、その領域の底となる最上位アドレスをスタックポインターに登録する。
 そして、データをスタックに積む場合は、積む大きさ分スタックポインターを減算する。
 スタックからデータを取り出す場合は、取り出した大きさ分スタックポインターを加算する。

動作モード
 ARMを例にすると、次の4つのモードがある。
 Full/Emptyは先に加減するか後で加減するかを表わし、Descending/AscendingはSPを減算するか加算するかを表わす。
 殆どのCPUの実装は、このうちFull Descending(フル下降)である。

再検索