2013年11月3日日曜日

C/C++ Hello World が動く仕組み

Hello Worldのプログラムを作って動かしたのですが、これがどうやって動いているかを説明します。

まずは、コンピュータの仕組みから説明します。コンピュータは基本的に次の3つから出来ています。


メモリ ↔ CPU ↔ I/O(Input/Output)


キーボードやマウス、ディスプレイにHDDはどこか?というとI/Oにつながっています。

そして、ご存知のようにコンピュータは電気で動いています。電気が流れる・流れないの2つの状態を大量にメモリに持っています。CPUでその電気の流れる・流れないの状態を取得したり、変更したりします。またCPUはキーボード等からI/Oを通じて電気の流れる・流れないを取得したり、ディスプレイに電気の流れる、流れないを渡して表示を行ったりすることができます。

単純に流れる・流れないは 2値(ディジタル)ですが、2値をたくさん組み合わたデータを操作することで色々なことができるのがコンピュータです。



さて、Hello Worldの仕組みに戻ります。a.exe(a.out)というファイルが作られたのですが、このファイルは実行形式のデータとなっています。画像は単に画像形式に、文書は文書形式になっているだけで、コンピュータは2値を組み合わせたデータを扱うと言う点に違いはないです。

実行形式のデータはOSによって中身が違っており、WindowsではPE(Portable Executable)という形式になっており、LinuxではELF(Excutable and Linkable Format)という形式になっています。gccなどのコンパイラはコンパイルすることでこれらの形式のファイルを作ります。

実行形式のファイルを実行する操作を行うと、OSが実行形式をI/Oを通じてHDDからファイルをメモリ上に展開します。 そして、main()という名前の関数から実行を行うようになっています。

CPUの部分では、以下の手順で実行を行っています。

printf();の実行
 ↓
return 0; の実行

メモリの部分では、プログラム自身と"Hello World\nGood bye\n"などの文字列を記憶しています。

I/Oの部分はプログラムを書くのが難しい部分です。そこで他の人(OS提供元など)が作ったプログラムを組み込み、それを使います。その組み込むプログラムのことをライブラリと言い、ヘッダーファイル(○○.h)と一緒に提供されます。

#include<stdio.h> では、標準I/O(Standard I/O)と言うものを組み込んであり、コンソールに表示を行う機能など、WindowsでもLinuxでも使えるような機能が提供されています。

ライブラリの組み込みは通常は、コンパイル時のオプションで指定する必要があります。しかしC言語の標準的な機能は、何も指定しないでもデフォルトで組み込まれるようになっています。

 以下のように"-v"オプションを付けてコンパイルを行うとコンパイルで何を行っているかの詳細が表示されます。

$ gcc -v hello.c

最後の辺りで -lmsvcrt などの文字が出てくると思います。これらがデフォルトで組み込まれたライブラリです(-lがライブラリを指定するオプションでmsvcrtというライブラリを組み込んだと言うことになります)。

Hello Worldの仕組みについては以上です。Hello Worldでも、大きいプログラムでも、コンピュータの基本が「CPU」、「メモリ」、「I/O」であることから、これらを操作する処理を書くことがプログラムを書くこと、になります。

1 件のコメント:

  1. 私が神と非常に深く個人的な関係を持っていることは秘密ではありません。去年、ヘルペスと一緒に生活しなければならなかったすべてのでたらめを通してその関係を押して抵抗しましたが、神は私の頑固さよりも大きく、そのヘルペスと性器ヘルペスのすべてを突破しました。個人的には、自分がどれほど良くないかを何度も何度も聞くことは、可能な限り最悪の方法で私の心に侵入しました。私は完全にシャットダウンし、このように人生が一時的なヘルペスの大流行を終わらせようとしているように目を覚ましていました。
    漢方薬にノーと言うのはco病です。それは恐怖に基づいています。そして、それは私の心が望むものに対して不誠実です。自分の周りに壁を作らないでください。特に健康上の問題や治療法に関しては、ハーブが作られたり、大胆な一歩を踏み出すことを恐れています。多くの若い男性/女性が何度も何度も私に言います、イトゥア博士は私を詐欺するつもりです、しかし今日私は彼に試みを与えます私は誰も漢方薬について私を納得させないだろうと感じていますわずか2週間飲んで、私は1年と数ヶ月間住んでいますが、今はアウトブレイクを経験していません、ヘルペス、統合失調症、癌、脊柱症、線維筋痛症、フルオロキノロンなどの病気のために彼の漢方薬が必要な場合は彼に連絡できます毒性症候群線維異形成症進行性。致命的な家族性不眠症第5因子ライデン突然変異、てんかんデュピュイトラン病、線維形成、糖尿病、セリアック病、クロイツフェルト・ヤコブ、ライム病、てんかん、病気、Co病、コプシー、アルツ、骨異形成症男性/女性不妊症、腸疾患、ハンチントン病、糖尿病、子宮筋腫。疾患、ループス、リポイド蓄積症(ゴーシェ病)、多嚢胞性疾患、脳アミロイド血管障害、運動失調、肝硬変、関節炎、筋萎縮性側索硬化症、アルツハイマー病、副腎皮質癌。喘息、アレルギー、HIV、てんかん、不妊、。 Email..drituaherbalcenter @ gmail.com then what app。+ 2348149277967 ....そこにいる病気の男性/女性に対する私のアドバイスは簡単です...常に開かれた本になり​​ましょう。あなた自身、あなたの状況、そしてあなたが何をしているのかについて正直にいじってください。何も遠慮しないでください。持ちこたえると、どこにも行けなくなります...たぶん、孤独なビルへの片道チケットであり、それはあなたが行きたい場所ではありません。だから私の最後の真実...そして私はこれを理解し始めたところです。

    返信削除