回答編集履歴

1

スタックのメリットについて追記

2018/11/23 11:02

投稿

pepperleaf
pepperleaf

スコア6383

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
+ コンパイラによっては、ローカル変数以外にも作業用の内部変数を使うものもあります。それらの変数は、ソースには無くても、スタック上に確保され、使われています。また、レジスタに割り当てられ、スタック上に領域が確保されない場合もあります。