1-1 C言語とは?

この記事は約3分で読めます。

C言語がない時代

C言語がまだこの世に存在していなかった昔の時代、OSはアセンブリ言語を用いて開発されていました。PCのCPUは0と1からなる機械語しか理解できませんが、機械語は人間にとって到底読みにくいものだったので人間にも扱えるようにできたのがアセンブリ言語です。アセンブリ言語は機械語と1対1に対応しているため、CPUごとにプログラムを変える必要がありました。当時UNIXというOSを開発していた時にアセンブリ言語を同じくらい高速で動作し、アセンブリ言語よりも扱いやすく互換性が高い言語としてC言語が開発されました。

C言語の特徴

C 言語は他の言語と比べて習得難易度が高く、同じ処理を記述するコードの量を比べても他の言語より多いと言われています。これは、C言語がハードウェアの性能を出来る限り引き出すことを目的としているからです。例えば、Javaというプログラミング言語の場合メモリの確保や解放は自動で行われるためプログラムは短く済みます。C言語ではメモリの確保も解放も自分で行わなければいけません。これは、メモリを確保するタイミング、開放するタイミングをプログラマーが手動で設定することによって、メモリを効率よく使うためです。その反面、メモリの解放を忘れるとプログラムを起動している間無駄なメモリの使用量がどんどん増えてしまいます。このように、C言語は高速で動作するかわりにプログラムが長くなり、バグが起きやすいプログラミング言語です。

実行速度の速さから、OSや組み込み機器、家電製品にはC言語がよく使用されています。

Android vs iPhone

かつては、iPhoneのほうがAndroidよりアプリの動作が速いといわれていました。筆者は今でもそうだと思います。iPhoneのCPUであるAシリーズ(厳密にはSoC)は台湾の半導体製造会社TSMC製で、Androidによく使われるCPUであるSnapdragonはTSMC製または韓国サムスン製です。2021年現在、TSMCのほうがサムスンより製造技術が上なのでTSMC製だと考えます。そうすると、プロセスルールが同じと仮定するとCPU単体の性能はiPhoneもAndroidもほぼ同じと考えられます。

CPUの性能が同じならソフトウェアによって動作速度の違いが出てきます。iOSは動かすデバイスが限られているため、C言語などの実行速度の速い言語で最適化されているのに対して、Androidのアプリは、様々な環境で動作するjava言語で開発することが多いです。java言語は仮想マシンというシステムで実行されるので、どうしてもソフトウェアの速さはiOSに劣ってしまいます。実際、筆者はGalaxy S21を使用していますが、ゲームの読み込みは明らかにiPhone12,13を持っている友人のほうが速いです。AndroidがiOSに勝つには、サムスンが半導体製造技術でTSMCに勝つか、Androidの内部構造が劇的に変わるしかないでしょう(2021年現在)。同じ理由で、MacBookはWindows機よりも軽く、少ないリソースで動くと思います。

コメント