コールスタック
識別子を使ったサブルーチン(関数)の呼び出しは言語処理系によって対応するアドレスへのジャンプ命令に解決され、またスタックへのリターンアドレスの格納やリターンアドレスへの復帰といった下位レベルの前処理・後処理も隠蔽される。x86のcallとretのように、アセンブラレベルでもそのような下位レベルのスタック操作を隠蔽する命令が用意されているアーキテクチャもある。
各プログラミング言語におけるスタックの詳細は、コンパイラ、オペレーティングシステム (OS)、命令セットなどに依存する。x64のように、特定の条件を満たす関数引数に関しては、スタックを使わずレジスタを使って渡すアーキテクチャもある。
いずれにせよ、言語環境を問わず、ソフトウェアを正常動作させるにはコールスタックを正しく保つことは重要である。コールスタックの容量は、デスクトップOS環境であっても既定で(スレッドごとに)数MiB程度しかなく、組み込み環境ではさらに制限が厳しい。高水準言語では普段コールスタックの存在を意識しないで済むがゆえに、ヒープではなくスタック上に巨大な配列を確保して容量を使い切ってしまい、スタックオーバーフローを発生させてしまうといった初歩的な間違いを犯すこともある。
通常、サブルーチンを呼び出す側でのコールスタック処理は最小限になっている。呼び出すコードがあちこちに存在することを考慮すれば、こうすることでコードの増大を抑えることができる。実際の引数の値は呼び出し毎に固有なので呼び出し側で評価され、呼出規約に従ってスタックにpushされるかレジスタに置かれる。「Branch and Link」のような実際の呼び出し命令が制御をターゲットのサブルーチンに転送するために実行される。
C++のようなオブジェクト指向言語では、メソッド呼び出しの際にthisポインタを引数と共にコールスタックに格納する。thisポインタは呼び出されるメソッドに対応するオブジェクトのインスタンスを指している。thisポインタはオブジェクト指向言語のコンテキストの基本要素であり、現在のオブジェクトの持つプライベートデータへのアクセスを提供する。thisポインタはオブジェクト指向プログラミングとコールスタックを結びつけるものである。