1.はじめに
いきなりですが質問です!!int型とchar型の違いは何だと思いますか?
バイト数が違う?たしかにそれ"も"ありますね。
2.果たして本当に違うのはバイト数だけなのだろうか
たしかに、int型は4バイト(今回は4バイトとして扱います)、char型は1バイトとバイト数が違います。
しかし、私はふと疑問に思ったんです。
バイト数が違うなら処理速度も違うのではないか?と・・・。
3.となれば実際に調べるしかない
ということで実際にプログラムを書いていきます!!
果たして、int型とchar型のどちらの処理速度が速いのでしょうか?それともどちらの処理速度も変わらないのでしょうか?
ちなみに私はint推しです。
フレー!フレー!i・n・t!負けるな!負けるな!c・h・a・r!
#include <stdio.h>
#include <time.h>
まず、使用するプリプロセッサはこの二つです。
突然ですが、私はtime.hを使ったことがありません!
そして、この記事を見ている方の中にもわからない方がいると思います(多分)。なので、time.hについて軽く説明していきたいと思います。
time.hは、時間を扱うためのマクロ、型、関数が定義・宣言されてるプリプロセッサ命令です。そのため、今回の記事のように時間を求めるときなどに使われます。
次に、main関数の中身は
このようになっています
int main() {
clock_t start, end;
double char_time, int_time;
// char型の処理時間を計測
char character = 0;
start = clock();
for (long i = 0; i < 100000000; i++) {
character += 1;
}
end = clock();
char_time = (double)(end - start) / CLOCKS_PER_SEC;//clock_tの値を秒変換
// int型の処理時間を計測
int integer = 0;
start = clock();
for (long i = 0; i < 100000000; i++) {
integer += 1;
}
end = clock();
int_time = (double)(end - start) / CLOCKS_PER_SEC;////clock_tの値を秒変換
// 結果を表示
printf("char型の処理時間: %.5f秒\n", char_time);
printf("int型の処理時間: %.5f秒\n", int_time);
return 0;
}
最初に変数を定義した後、char型の変数characterとint型の変数integerをそれぞれiが1億になるまで反復させます。
そして、printf結果を小数点第5位まで出力します。
4.結果発表ぉぉぉー!
出力結果は以下のようになりました!デデン
また、毎回同じタイムで処理を終えているわけではなく(当たり前ですが ^^;)実行するたびにタイムはバラバラになりました。
一応、例として他のタイムも載せておきます。
5.考察・感想
考察
今回のプログラムから、
・連続で実行を行うと処理が遅くなる
・0.02秒の差が生まれることもあれば、その半分にも満たない差しか生まれないこともある
・処理の順序を逆にしても処理時間は変わらない
という三つの結果が得られました。
ですが、いずれの結果も
int型の変数がchar型の変数の処理速度を上回っていた
という共通点がありました。
では、なぜint型のほうが速いのか?それについて私なりに考えてみましたが、残念ながら「int型を主として作られているから」程度の考えしか浮かびませんでした...。
考察らしい考察はできませんでしたが、次回記事を書く機会があればこのことについて追及してみたいです。
感想
まず、今回初めてQiitaを使用して記事を書いたので、そのことについて少し述べようと思います。初めてQiitaを使用しての感想を一言で表現するならば、ずばり!「楽しかった!!」です。今まで苦手分野だと思っていた自分の考えを文字に起こすという作業が思いのほかスムーズに進み、記事を書くことの楽しさに気づきました。
また、プログラムについては、冒頭にも書いてある通り、私はtime.hを用いてプログラムを組んだことがありませんでした。ですが、今回time.hを使用したことで、C言語で時間を計測することが可能であるという知識を得ました。
さらに、以前から気になっていた処理時間の違い(誤差レベルではありましたが)についても知ることができ、スッキリしました。
6.最後に
最後に、ここまで記事を読んでいただきありがとうございました!
もしこの記事が気に入っていただけたらフォロー、goodボタンを押していただけると幸いです。
それでは、またどこかで ( ˙꒳˙ )ノシ
以下、参考にさせていただいたサイト:
[C言語 標準ライブラリ] time.hの使い方
https://captain-cocco.com/time-h-c-standart-library/
clock() — プロセッサー時間の判別
https://www.ibm.com/docs/ja/i/7.3?topic=functions-clock-determine-processor-time