(タイトルが間違っていると私は失礼しますが、バインドされていると思いますが、何か知らせてタイトル/質問を編集します)実行時/コンパイル時およびヒープ/スタックの明確化
プログラミングでデータをバインドするさまざまな方法について学びました(特定の言語はありません)。静的)
1を(それは私の質問になります下に私は、クラスに与えられた定義と、種類を与えた):添字範囲は静的にバインドされ、ストレージ割り当て)は、実行時の前に(
-
静的です
- 開始するには、「記憶域の割り当ては静的です」ということは、実行前に発生することを意味するものではありません。今私の考えは、プログラム中にメモリが割り当てられるので、プログラムを実行する前にストレージがどのように割り当てられるのでしょうか?これは私を最も悩ませている1つの質問です。実行時間の前にメモリがどのように割り当てられているかについて読むことは意味をなさない。私はプログラムをコンパイルすることができ、それを2週間実行することはできません。その前にどのようにメモリを割り当てるのですか?あなたが見ることができるように私は何かを逃しています。
2)固定スタック-ダイナミック:私はあなたができるC++で、私の例が正しいことを確認したい添字範囲が静的にバインドされていますが、割り当てが宣言時
で行われます't do(VS 2015でテスト済み) int size = 100; intデータ[サイズ];
が、これは
const int size = 100; int data[size];
私の推測では、それが原因のconstは、プログラムがその文を打つ前にサイズを知っているので、コンパイル時に見られているという事実に「固定」されていることになり、ある本の作品正しい?
3)スタック-ダイナミック:添字範囲が動的にバインドされ、ストレージの割り当ては
- )実行時に行われる(動的で、これは私の教授が私たちを与えたことはない一例であるが、誰でも私に1つを提供しますか?固定スタック動的に似て:記憶結合は、動的しかし割り当てた後に固定されている(すなわち、要求されたときに行われる結合及びストレージがヒープから割り当てられ、スタックせず) ヒープダイナミックを修正
4)私は正しいだ場合
これは、それはすべて動的であるため、割り当てられたメモリは、ヒープ上にある、という事実のために、この
int * x = new int [size];
の一例です固定された部分は、サイズが成長できないという事実になります。
5)ヒープ・ダイナミックを信じることがわかりません:添字範囲やストレージの割り当ての結合は動的であり、
- 私の教授は、それが動的に成長することができますので、一例として、C#でのArrayListを使用し、任意の回数を変更することができますが、これは唯一私がArrayListのを考えたためである混同しますただのclです基本的な配列で作業しています。配列が大きくなると、メモリをガーベッジ・コレクションして大きなものを割り当て、要素をヒープ・ダイナミックに固定する要素を移動させます。
これは広すぎます。 – Savior
@Pillarそれは文字通り私が外出しなければならないすべてですが、私はこれらの5つの概念を理解するだけでなく、コンパイル時と実行時の動作について理解しています。 –
一度に1つ質問してください。 – Savior