2012-01-20 10 views
1

cプログラム実行可能a.outのようなプロセスが実行されているときに、RAMに存在する必要があるプログラム要素は何ですか?プログラムコードもそこにありますか?そしてもしそうなら、それの必要性は何ですか?メインメモリ内のプログラム要素

+0

[このリンク](http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory)は非常によく、それを説明してご覧ください –

答えて

1

はい、a.outが実行されているときにコードa.outがメモリに存在します。命令ポインタ(またはレジスタ)はメモリ内で実行されている現在の演算を指し、ほとんどの演算は命令ポインタを次の演算に進める。コードでは元のCコードを意味していますが、これは必ずしもそうではありません - 組み立てられた実行可能なバイトコードだけがメモリになければなりません。コンパイラ/リンカには、デバッグを容易にするために実行可能なアセンブルされた出力にCコードを含めるフラグがあります。

プロセスの仮想メモリ空​​間について言えば、これにはメモリマップされたioレジスタ、カーネルスペース関数、プログラムが必要とするライブラリ(少なくとも一般的なタイプのlibcオペレーション)。

0

原則として、マシンコードはプロセスのアドレス空間内にあり、非常に頻繁にRAMにあります。しかし、マシンコードがまだRAMになく、カーネルがディスクからロードしなければならない状況があります。これは、virtual memoryのために透過的に発生します。具体的にはexecve(2)システムコールは実行可能バイナリ内のさまざまなセグメントのメモリマッピングを設定します。mmap(2)と同じように(メモリマップを変更するにはmunmapmprotectのシステムコールです)。より理解し、または単にそのcatを実行しているプロセスのメモリマップを取得するために

cat /proc/self/maps 

を実行するためのプロセス1234の/proc/1234/maps

ルック。

+0

何をしますか上記のコマンドdoと、その出力の解釈を教えてください。 –

+0

このコマンドを試してください:(コマンドを実行しているプロセスの)メモリマッピングのテキスト表現を表示します。それから私があなたに与えた他のリンクを読んでください。 –

0
Is program code also there? 

はい、あなたのプログラムコードはactualy任意のCプログラムは、あなたのコードは、コードセグメントに入り、メモリ内の主要3セグメント

* Data Segment 
* Code Segment 
* Stack and Heap areas 

を持っているRAM

にもなります。
enter image description here

This article

関連する問題