開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第7章(入出力)、7.8(雑関数)、7.8.2(文字クラスのテストと変換)演習7-9を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 7-9.
スペースを節約する形。
コード
sample.c
#include <stdio.h> int isupper(char); int main(int argc, char *argv[]) { int c, i, n; n = 5000000; while ((c = getchar()) != EOF) { for (i = 0; i < n; i++) isupper(c); } return 0; } int isupper(char c) { return 'A' <= c && c <= 'Z' ? 1 : 0; }
入出力結果(Terminal)
$ du a.out 24 a.out $ time ./a.out < sample.txt real 0m23.477s user 0m22.365s sys 0m0.086s $
実行時間を短くする形。
コード
sample.c
#include <stdio.h> #define isupper(c) ('A' <= (c) && (c) <= 'Z') ? 1 : 0 int main(int argc, char *argv[]) { int c, i, n; n = 5000000; while ((c = getchar()) != EOF) { for (i = 0; i < n; i++) isupper(c); } return 0; }
入出力結果(Terminal)
$ du a.out 24 a.out $ time ./a.out < sample.txt real 0m17.678s user 0m16.697s sys 0m0.070s $ real 0m7.080s user 0m6.676s sys 0m0.028s $
Cのプリプロセッサを使った方が、実行速度が速くなったのは確認できたけど、Cのプリプロセッサを使わず関数を定義した場合にスペースが節約できたかどうかはどう確認すればいいのかなぁ〜コンパイルして出来上がったファイルのサイズが異なるかと思ったけど、どちらも24と同じサイズに。。(前者がスペースの節約になると考えた理由は、Cのプリプロセッサで定義した場合はisupperが呼び出される都度、Cのプリプロセッサで定義した内容が展開されると考えたから。)
0 コメント:
コメントを投稿