スタック

読み:スタック
外語:stack 英語
品詞:名詞

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

目次

スタックは、本を積み重ねるような構造である。

新しいデータは上に重ね、取り出す時は上から順に出てくるようなスタイルの構造をなす。

LIFO
LIFO

CISC/RISC

CISCタイプのマイクロプロセッサーでは、レジスターの内容の保管に用いたり、他のプログラムを呼び出す際に現在実行中のアドレスを保管しておいたりする際に利用している。

RISCでは、高速化のためにスタックの機能を持っていないものもある。

メモリー

スタックはメインメモリーの一部を利用し、その位置はCPUのレジスターであるスタックポインターによって示されるのが一般的である。従って、スタックの大きさは有限であり、格納できるデータの総量は決まっている。

しかしプログラムのバグなどで規定の大きさを超える量のデータをスタックに積んでしまった場合、別のメモリー領域を破壊してしまうことになる。これをスタックオーバーフロー(スタックあふれ)と呼ぶ。

スタックポインター

一般的な実装では、スタックに使うメモリー領域をまず決め、その領域の底となる最上位アドレスをスタックポインターに登録する。

そして、データをスタックに積む場合は、積む大きさ分スタックポインターを減算する。

スタックからデータを取り出す場合は、取り出した大きさ分スタックポインターを加算する。

動作モード

ARMを例にすると、次の4つのモードがある。

Full/Emptyは先に加減するか後で加減するかを表わし、Descending/AscendingはSPを減算するか加算するかを表わす。

  • FD Full Descending (フル下降)

    SPの位置には既に値が埋まっている(フル)と考え、先にSPを変更し、SPの位置に値を置く。

    下降モードは、利用する度にSPを減算する。つまりスタックは下方に成長する。

    PUSH処理後のSPは、最後に置かれた値を指している。

    POP処理後のSPは、次の使用(フル)ロケーションである。

  • ED Empty Descending (空下降)

    SPの位置にはまだ値が格納されていない(空)と考え、SPの位置に値を置き、SPは後で変更する。

    下降モードは、利用する度にSPを減算する。つまりスタックは下方に成長する。

    PUSH/POP処理後のSPは、次に置かれる場所を指している。

  • FA Full Ascending (フル上昇)

    SPの位置には既に値が埋まっている(フル)と考え、先にSPを変更し、SPの位置に値を置く。

    上昇モードは、利用する度にSPを加算する。つまりスタックは上方に成長する。

    PUSH処理後のSPは、最後に置かれた値を指している。

    POP処理後のSPは、次の使用(フル)ロケーションである。

  • EA Empty Ascending (空上昇)

    SPの位置にはまだ値が格納されていない(空)と考え、SPの位置に値を置き、SPは後で変更する。

    上昇モードは、利用する度にSPを加算する。つまりスタックは上方に成長する。

    PUSH/POP処理後のSPは、次に置かれる場所を指している。

殆どのCPUの実装は、このうちFull Descending(フル下降)である。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club