レジスタ (コンピュータ)
レジスタの値は、プロセッサの内部状態そのものである。つまり、レジスタの値をそっくりそのままどこかに退避させ、後にそれをそっくり元に戻せば、プロセッサの動作を一時中断し、他の作業をさせ、中断前の状態に戻すことができる。
割り込み処理による高速応答性を要求されるアプリケーションを作る場合や、時分割などによる擬似的なマルチタスクを実現する時には、この動作はきわめて頻繁に行なわれる。この、プロセッサの動作状態をそっくり保存して他の動作状態に入れ替えるという動作は、コンテキストスイッチと呼ばれる。
一般には、コンテキストスイッチはスタックを用いてレジスタの内容を外部のメインメモリの一定領域上に一時保存することで実現されている。しかし、コンテキストスイッチを高速化するために、主要なレジスタのコピーを保持する別のレジスタ群をプロセッサ内部に用意しておき、それを用いてコンテキストスイッチを行なう設計になっているプロセッサもある。
PCでポピュラーなx86の場合(w:X86 calling conventions)、IA-32およびそれより前のプロセッサでは、コンパイラの生成するコードではスタック渡しが多かったが、最適化の進んだコンパイラではMicrosoft Cの__fastcall構文でレジスタ渡しを明示したり、可能な限りレジスタ渡しをするコードを生成するLSI C-86もある。x64にはMicrosoft x64とSystem V AMD64の2種類があるが、どちらもレジスタ渡しが基本である。
可変長引数をレジスタ渡しするのは困難であるため、可変長引数の場合にはスタック渡しにすることも多い。但し、呼び出し規約等で引渡し方法をきちんと定義し、またそれに沿ったプログラミングを行わないと、齟齬が生じてプログラムの誤動作を引き起こす。例えばC言語において、ヘッダーを適切にincludeせずにプロトタイプ宣言なしでprintf関数を呼ぶと暴走し、hello worldすら動かない事例を引き起こす。