仮想メモリ領域の5 C ++のメモリ管理の構成図4

 

 

 

 

 

  私たちはしばしば、32ビットシステムは、各プロセスのための4G仮想メモリ空​​間を割り当て(およびMMUは、実際のメモリの物理メモリにこれら二つの4Gの仮想メモリマッピングのために責任がある)、実際には、唯一の0〜3Gは本当に完全に自分自身を処理していることを言います私たちは、ユーザ領域を呼び出し、すべてのプロセス間で共有される3〜4G 1G、それは我々がコア面積呼んで、私たちのプログラムは、直接カーネル領域にアクセスすることはできません。

 

 

する#include <stdio.hの> INT A;     // 初期化されていないグローバルエリア.bssのint型のB = 1 ;     // 初期化されたグローバルエリア.DATA 静的INT C = 2 ;     // 初期化されたグローバルエリア.DATA CONST INT D = 3 ;     // 読み取り専用データセグメントとも呼ばれるリテラル定数領域ro.dataを、dの値を変更することはできませんINTメイン(ボイド
{ int型 E = 4 ;     // スタック領域静的int型 F = 5 ;     // 初期化されたグローバルエリアCONST INT G = 6 ;    
 


 
 

    
     
     // スタック領域、変数名は、その値を変更することはできないが、値は、そのアドレスによって修飾されている
    INT * P = malloc関数(はsizeofINT))     // スタック領域内のポインタの変数pが、それは空間の4つのバイトを指しヒープ内
    チャー * STR = ABCD  ;     // 文字列が一定の領域に存在テキスト、スタックポインタの可変領域STRは、アドレス開始「ABCD」が格納される「ABCD」
    戻り 0 ; 
}

 

  地元の素材を言うために使用:「グローバル変数はコンパイル時にスペース、ランタイムの配布スペースでローカル変数を割り当てる」、統合開発ツール対のように、我々は簡単なプログラムを書くいる直接「実行」を指していることこのステップでは、実際には、唯一の「実行」簡単に理解するために、1つのステップで実行されている、コンパイルが、書き込みのコードをvimの場合は、GCCコンパイラを使用すると、実行可能ファイルa.outを生成し、Linuxで動作./a.outコンパイル時にその割り当てはどのようにそれを説明するには?

  実際には、仮想アドレスグローバル変数(静的ローカル変数を考慮することができる)、および関連情報を決定するだけで、コンパイル時には、実行可能ファイルa.outに存在します。終了> - >ファイル名を指定して実行(占有CPU) - - >保留(CPU以外のリソースを待って、CPUを放棄)レディ(待機中のCPU):私たちは、四つの状態について(実行されている実行可能ファイル)のプロセスを語りますまた:多くの場合、場所に関連した準備段階のプロセスの初期状態は、状態のこの初期の段階にある、グローバル変数に割り当てられた仮想アドレス空間から物理アドレスにマッピングされたものを準備作業の多くをやった、と良いが初期化されます。だから、それは、そのアプリケーションのためのスペースを割り当てるようになったという声明をmain()関数の前にプログラムでグローバル変数を入力し、それはステートメントにローカル変数やヒープ変数、メモリ内でのみ、プログラムの実行を存在(または定義)しています。 

 

参考ブログ:

  https://blog.csdn.net/m0_37829435/article/details/81158960

おすすめ

転載: www.cnblogs.com/icmzn/p/11824802.html