回答編集履歴
1
スタックのメリットについて追記
answer
CHANGED
@@ -3,4 +3,24 @@
|
|
3
3
|
|
4
4
|
FILO ... First In, Last Out ですから、その通りでしょう。
|
5
5
|
|
6
|
-
スタック構造を使えば、関数呼び出しが簡単にできるという事です。
|
6
|
+
スタック構造を使えば、関数呼び出しが簡単にできるという事です。
|
7
|
+
|
8
|
+
[追記]
|
9
|
+
最近のCPUでは確認してませんが、、、スタック操作は専用命令があり、処理が楽。
|
10
|
+
スタックポインタ更新(減算)、スタックにデータを置く。
|
11
|
+
スタックを読出し、スタックポインタ更新(加算)。
|
12
|
+
スタックポインタからのオフセットアクセス。
|
13
|
+
それぞれが、一命令。
|
14
|
+
|
15
|
+
まあ、CPU依存ですが、Intelに関しては、x86互換が基本なので、変わらないと思います。
|
16
|
+
|
17
|
+
単にローカル変数をスタックじゃないところに置いても良いですが、スタックに置いた方が楽と思います。また、再帰関数なんて、スタックを使わずに実装するなんてどうすれば、良いのでしょうか。
|
18
|
+
(きっと方法はあると思うが、思いつかない)
|
19
|
+
また、ローカル変数をスタックに置くと、関数を抜ける時の後始末が楽というのがあります。(スタックポインタ操作だけ)
|
20
|
+
|
21
|
+
スタックとヒープですが、一つのメモリ領域を先頭(アドレスの小さい方)から、ヒープで、最後(アドレスの大きい方)から、スタックに割り当てるのが、昔の一般的割当て。(今も同じ?)
|
22
|
+
|
23
|
+
> スタック領域に逆順に確保
|
24
|
+
|
25
|
+
これは処理系(コンパイラ)依存と思います。
|
26
|
+
コンパイラによっては、ローカル変数以外にも作業用の内部変数を使うものもあります。それらの変数は、ソースには無くても、スタック上に確保され、使われています。また、レジスタに割り当てられ、スタック上に領域が確保されない場合もあります。
|