teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2018/11/23 11:02

投稿

pepperleaf
pepperleaf

スコア6385

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