C言語:ストレージカテゴリ、リンク、メモリ管理


リンク
C変数の3種類のリンク:外部リンク、内部リンク、リンクなし
  • リンク変数なし:ブロック作用域、関数作用域または関数プロトタイプ作用域を有する変数
  • 外部リンク変数および内部リンク変数:ファイル役割ドメインを有する
  • 外部リンク変数:
  • をマルチファイルプログラムで使用できます.
  • 内部リンク変数:
  • は1つの翻訳ユニットでのみ使用できます.
    きおくじかん
  • オブジェクト:ハードウェアから見ると、格納された各値は一定の物理メモリを占有する、オブジェクトであるこのメモリ
  • .
  • 保存期間:オブジェクトを記述するために使用され、オブジェクトがメモリにどのくらい保持されているかを示す
  • .
  • 識別子:オブジェクトにアクセスするために使用され、その役割ドメインおよびリンクは、プログラムのどの部分が使用可能であるかを示す
  • 役割ドメイン:記述プログラムにおけるアクセス可能な識別子の領域
  • Cオブジェクトには、静的記憶期間、スレッド記憶期間、自動記憶期間、動的割当て記憶期間の4種類がある
  • 静的ストレージ期間すべてのファイル役割ドメイン変数に静的ストレージ期間があります.ファイルの役割ドメイン変数の場合、キーワードstaticは、保存期間
  • ではなくリンク属性を示す.
  • スレッドストレージ期間:同時プログラム設計に使用され、プログラムは悲しい雰囲気の複数のスレッドを実行する.スレッドの保存期間を持つオブジェクトは、宣言されたときからスレッドの終了まで存在します.キーワードで_Thread_localがオブジェクトを宣言すると、各スレッドは変数のプライベートバックアップpsを取得します.長い配列の格納期間は、宣言からブロックの末尾
  • までです.
    変数#ヘンスウ#
  • 自動変数:自動記憶カテゴリの変数は自動記憶期間、ブロック役割ドメインを有し、リンク
  • なしである.
  • レジスタ変数:通常の変数よりもアクセス速度が速く、レジスタ変数アドレスが取得できない(メモリではなくレジスタに格納されている)
  • .
  • ブロックの静的変数:ブロックの作用ドメイン、リンクなし、静的記憶期間を有する
  • 外部リンクを持つ静的変数:ファイル役割ドメイン、外部リンク、静的記憶期間psを持つ:変数定義宣言をすべての関数の外に置くと外部変数が作成され、関数でexternで再宣言できます.外部変数を認識しない場合の自動初期値は0
  • である.
  • 内部リンクを有する静的変数:静的記憶期間、ファイル役割ドメイン、内部リンクps:乱数関数rand()内部リンクを用いる静的変数
  • .
    メモリ関数malloc()とfree()の割り当て
  • malloc():メモリは割り当てられますが、名前は付けられず、動的に割り当てられたメモリブロックのバイトアドレスが返されます.変更アドレスをポインタ変数に割り当て、このメモリにポインタ変数でアクセスできます.eg:
  • double * p;
    p = (double *) malloc(10 * sizeof(double));
    
  • free():この関数のパラメータは、前にmalloc()が返したアドレスであり、前にmalloc()が割り当てたメモリps:malloc()とfree()を解放するポインタ変数は異なりますが、2つのポインタは同じアドレスを格納する必要があります::同じメモリを2回解放できません!::
  • exit():メモリ割り当てに失敗し、exit()関数終了プログラム
  • を呼び出す
  • calloc():malloc()と同様に、ブロック内のすべてのビットを0
  • に設定します.
    関連キーワード
  • _Thread_local:キーワードで_Thread_localがオブジェクトを宣言すると、各スレッドは変数のプライベートバックアップを取得します.
  • auto:カテゴリ記述子を格納し、外部変数定義を意図的に上書きすることを示すために、またはその変数を他のストレージカテゴリpsに変更しないことを強調する::autoはCとC++で完全に異なる:
  • register:レジスタ変数を宣言するために使用されますが、必ずしも申請に成功するとは限りません.コンパイラは、レジスタまたは最速使用可能なメモリの数に基づいて、要求に応答するかどうかを決定します.ps:::メモリを割り当ててもregisterで宣言された変数はアドレスに直接アクセスできません::
  • static:ブロック役割ドメイン変数
  • を宣言するために使用できる静的ストレージ期間を提供する.
  • extern:既存の外部定義を参照し、ファイルの役割ドメインを持つ変数を関数で繰り返し宣言できます.配列については、宣言を参照するときに配列サイズ
  • を指定する必要はありません.
  • const:定常ps:マルチファイルconstを使用する場合、1つのファイルで宣言を定義し、他のファイルで宣言を参照するか、const変数をヘッダファイルに
  • const float * p;			//p      ,p       
    float * const p;			//p       ,p        
    const float * const p;	//p       ,p         
    const int arr[];			//    arr    
    const int * arr;			//  
    

    restric:ポインタのみで使用できます.ポインタがデータ・オブジェクトにアクセスする唯一の方法であり、初期の方法であることを示します.