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