6

次のローカル変数があるとします。

int a = 0;
int b = 1;
int c = 2;
int d = 3;

私の知る限り、これらは次のようにシステムスタックに割り当てられます。

|   |
| 3 | d
| 2 | c
| 1 | b
|_0_| a

これは、aの値を取得するために、d、c、およびbの値を最初にスタックからポップアウトする必要があることを意味しますか?もしそうなら、これらの値はどこに行きますか?これは、最近宣言された変数へのアクセスが高速になることを意味しますか?それとも私は何かが足りないのでしょうか(私はそうだと思います)、そしてすべてが他の方法で機能しますか?

編集:ありがとう、みんな!

4

3 に答える 3

18

スタック上のローカル変数は通常、スタックフレームの先頭を指すいわゆるフレームポインタを基準にしてアクセスされます。スタックポインタに対してこれを行うことも可能ですが、これは式の評価中に移動するため、追跡するのがより困難になります。

実際には、このような変数はプロセッサレジスタに保持することもできます。

于 2009-02-08T13:02:59.043 に答える
6

または私は何かが欠けていますか

スタックが通常のメモリに存在することを見逃しているため、ランダムアクセスが可能です。フレームポインタ(「ローカル」スタックの一番下)に適切なオフセットを追加するだけで、値を保持するメモリセルへのポインタを取得できます。

于 2009-02-08T13:02:30.307 に答える