ソースコードが実行可能ファイルになるまで
プログラムは、人間が読み書き可能な言語で書かれています。
これをソースコードと言います。
しかしコンピュータがプログラムを実行可能にするためには、コンピュータが読み取り可能なマシン語(ネイティブコード)にプログラムを変換する必要があります。
この作業をコンパイルと言います。
コンパイルを行うコンパイラは言語ごとに存在しています。
しかし、その言語ごとのコンパイラが最終的に作成するネイティブコードは同じものになります。(マシン語は言語の差異によりません。)
ちなみに、Javaの場合は、コンパイルを行うとJavaバイトコードが作成されます。
そのJavaバイトコードを、JavaVMが自分の乗っているマシンのマシン語に翻訳するという仕組みになっています。
しかし、このままではまだ実行可能なファイルにはなりません。
作成されたオブジェクトファイル(ネイティブコードに変換されたソースコード)とそれが参照しているライブラリなどへの参照を全てリンクする必要があります。
この作業をリンク、リンカーが行います。
プログラムが実行されるまで
プログラムはハードディスクに格納されています。
それをメモリにロードすることで、CPUが実行できるようになります。
プログラムが実行されるときに確保されるメモリ領域
以下の2種類がある。
- スタック
- ヒープ
スタック領域
一つの関数が呼び出されると確保され、終了すると解放される。
ヒープ領域
オブジェクトの生成時に確保される。
プログラマが明示的に取得と解放を記述する必要がある。