C/C++ はなぜ高速に動作するんですか？


C/C++ は非常に高速に動作する言語であることは既に知られていますが、なぜほかのプログラミング言語に比べて圧倒的に高速に動作するのでしょうか？

マシン語やアセンブリ言語に近い記述ができるからでしょうか？ C/C++ の高速化の秘訣が知りたいです。




他言語ってのが「インタプリタ」系言語であるなら、そりゃ「コンパイル」系言語と「実行速度を比べる」のがそもそも間違いというか、かわいそうというか。でも「ソースコードを書く時間」「実行に移せるまでの時間」はインタプリタ系言語のほうが圧倒的に短かかったりしますので、それはその言語に何を期待しているかの違い。

同じコンパイル系言語であっても  
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") / [c++](/questions/tagged/c%2b%2b
"'c++' のタグが付いた質問を表示") は事前コンパイル (Ahead-of-Time)  
[java](/questions/tagged/java "'java' のタグが付いた質問を表示") /
[.netframework](/questions/tagged/.netframework "'.netframework'
のタグが付いた質問を表示") は実行時コンパイル (Just-in-Time) [wikipedia :
JIT](https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9)  
という違うものがあります。

AOT では、末端顧客が使っている実行環境のうちの最低ラインを想定しておかないといけないのに対して  
JIT では、実行環境に合わせた高度最適化ができる **場合がある** ので、  
客先での JIT にかかる時間を加味しても後者のほうが実行速度が上、なんてことはままあるようです。

ゲーム機 (PS4 / PS5 / XBOX) などの場合、実行環境が勝手に変わることはまずないので AOT
のほうが高速でしょう。ワンチップマイコンなどでは JIT コンパイラを入れるだけの容量が無いので AOT しか選択肢がないのが普通。




他言語ってのが「インタプリタ」系言語であるなら、そりゃ「コンパイル」系言語と「実行速度を比べる」のがそもそも間違いというか、かわいそうというか。でも「ソースコードを書く時間」「実行に移せるまでの時間」はインタプリタ系言語のほうが圧倒的に短かかったりしますので、それはその言語に何を期待しているかの違い。

同じコンパイル系言語であっても  
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") / [c++](/questions/tagged/c%2b%2b
"'c++' のタグが付いた質問を表示") は事前コンパイル (Ahead-of-Time)  
[java](/questions/tagged/java "'java' のタグが付いた質問を表示") /
[.netframework](/questions/tagged/.netframework "'.netframework'
のタグが付いた質問を表示") は実行時コンパイル (Just-in-Time) [wikipedia :
JIT](https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9)  
という違うものがあります。

AOT では、末端顧客が使っている実行環境のうちの最低ラインを想定しておかないといけないのに対して  
JIT では、実行環境に合わせた高度最適化ができる **場合がある** ので、  
客先での JIT にかかる時間を加味しても後者のほうが実行速度が上、なんてことはままあるようです。

ゲーム機 (PS4 / PS5 / XBOX) などの場合、実行環境が勝手に変わることはまずないので AOT
のほうが高速でしょう。ワンチップマイコンなどでは JIT コンパイラを入れるだけの容量が無いので AOT しか選択肢がないのが普通。

