2016-04-12 18 views
-1

(タイトルが間違っていると私は失礼しますが、バインドされていると思いますが、何か知らせてタイトル/質問を編集します)実行時/コンパイル時およびヒープ/スタックの明確化

プログラミングでデータをバインドするさまざまな方法について学びました(特定の言語はありません)。静的

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です基本的な配列で作業しています。配列が大きくなると、メモリをガーベッジ・コレクションして大きなものを割り当て、要素をヒープ・ダイナミックに固定する要素を移動させます。
+1

これは広すぎます。 – Savior

+0

@Pillarそれは文字通り私が外出しなければならないすべてですが、私はこれらの5つの概念を理解するだけでなく、コンパイル時と実行時の動作について理解しています。 –

+1

一度に1つ質問してください。 – Savior

答えて

1

"実行前"とは、プログラムのインスタンスが作成されたときにメモリが割り当てられることを意味します(オペレーティングシステムがこれを実行すると、プログラムの実行が開始されます)。 。

はい、const intの値がコンパイル時にわかっているということは間違いありません。したがって、コンパイラはコンパイル時にこの値を使用して配列のサイズを知ることができます。 代わりに変数を使用する場合は、実行時に動的に配列を割り当てる必要があります。

"スタックダイナミック"は、関数のパラメータなどの関数呼び出しで変数が作成されることを意味します。実行時および一時的であり、スタックに存在します。そのサイズはコンパイル時には分かりません。

"固定ヒープダイナミック"の例は、配列のサイズを示す定数ではなく変数であると仮定しているため、おそらく正しくありません。 「固定」はコンパイル時に認識されるため、定数/リテラル​​を使用する必要があります。 「固定ヒープ・ダイナミック」は、固定サイズの配列ですが、ヒープ上に動的に割り当てられます。

"ヒープダイナミック"は、サイズが変更できることを意味するものではなく、実行時にのみサイズがわかることを意味します。配列のサイズを自然に変更することはできません。なぜなら、隣接するメモリが増えていくことを保証できないからです。配列を大きくすると、新しい大きな配列を作成し、古い内容をその中にコピーし、古い配列を削除する必要があります。

+1

完璧、ありがとう! –

関連する問題