C言語とpythonの実行速度の違い
始めに
C言語にある程度慣れてきてほかの言語にも興味が出てきてどんな違いがあるか気になって調べると、難易度やらどんな時に使うかなどが出てきましたが、実行速度の違いがありました。どれくらい違うのか気になったので調べてみたいと思います。
コンパイル言語とインタプリタ言語
そもそも、プログラミング言語は2種類に分類できます。
c言語はコンパイル言語と呼ばれる言語です。コンパイル言語とは、プログラムコードを実行可能な形式に変換するために、コンパイラと呼ばれるツールを使用するプログラミング言語のことを言います。プログラミング演習の時間にたくさん使った gcc 〇〇.c -o 〇〇
がコンパイル作業です。
一方で、Pythonはインタプリタ言語と呼ばれる言語です。インタプリタ言語とは、ソースコードを実行時に一行ずつコンパイルしながら実行するプログラミング言語のことを言います。
実行速度
c言語とPythonはそれぞれコンパイル言語とインタプリタ言語であることがわかりましたが、では実行速度の違いはどうでしょうか?
結論から言うとc言語のほうが速いです。上で記述したように、コンパイル言語は実行前にインタプリタ言語は実行中にコンパイルします。なので、先にコンパイルしているコンパイル言語のほうが速く実行できます。英語の長文を日本語で翻訳してから読んで理解するのと、英語のまま読んで理解するのでは前者のほうが理解するのが速いのと同じです。
実際にやってみた
c言語野ほうが実行速度が速いと思っても本当に早いのか?実際にやってみたいと思います。そもそもどうやって計るのか?思いつかなかったのでCHATGPTに聞いてみました。そしたらあるコードが返ってきました。
#include <stdio.h>
#include <math.h>
#include <time.h>
int is_prime(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return 0;
}
return 1;
}
int count_primes(int limit) {
int count = 0;
for (int num = 0; num < limit; num++) {
if (is_prime(num)) count++;
}
return count;
}
int main() {
clock_t start_time, end_time;
start_time = clock();
int prime_count = count_primes(100000);
end_time = clock();
printf("Found %d primes.\n", prime_count);
printf("Time taken: %f seconds\n", (double)(end_time - start_time) / CLOCKS_PER_SEC);
return 0;
}
import time
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
def count_primes(limit):
count = 0
for num in range(limit):
if is_prime(num):
count += 1
return count
start_time = time.time()
prime_count = count_primes(100000)
end_time = time.time()
print(f"Found {prime_count} primes.")
print(f"Time taken: {end_time - start_time} seconds")
何のコードかというと、0から100,000までの素数をカウントしてそれにかかった処理速度を表示するというプログラムです。
とりあえずやってみようと思ってDebianで試してみました。
Found 9592 primes.
Time taken: 0.10423851013183594 seconds
1行目が素数の個数で下が処理にかかった時間です。なるほどと思いながら、次はc言語のほうもやってみました。
Found 9592 primes.
Time taken: 0.010333 seconds
素数の個数は同じで、かかった時間はなんと桁が一つ違う結果になりました。コードがもっと長くなれば実行時間の差がもっとはっきりわかると思います。
それもやってみたいですが、論理回路と電気電子回路の試験もあるのでまた別の機会に、、、