質問:
スタックへのアクセスはメモリへのアクセスと同じ速度ですか?
たとえば、スタック内でいくつかの作業を行うことを選択したり、メモリ内のラベル付けされた場所で直接作業を行うことができます。
だから、具体的には:とpush ax
同じ速度mov [bx], ax
ですか?同様にpop ax
、速度はmov ax, [bx]
?(bxがnear
メモリ内の場所を保持していると仮定します。)
質問の動機:
Cでは、パラメーターを受け取る自明な関数を思いとどまらせるのが一般的です。
これは、パラメーターがスタックにプッシュされ、関数が戻ったときにスタックからポップされる必要があるだけでなく、関数呼び出し自体がCPUのコンテキストを保持する必要があるため、つまりスタックの使用量が増えるためだといつも思っていました。
しかし、見出しの質問に対する答えを知っていると仮定すると、関数がそれ自体をセットアップするために使用するオーバーヘッド(プッシュ/ポップ/コンテキストの保持など)を、同等の数のダイレクトメモリアクセスの観点から定量化できるはずです。したがって、見出しの質問。
(編集:明確化:上記で使用されているのは、16ビットx86アーキテクチャのセグメント化されたメモリモデル
near
とは対照的です。)far