2013年9月5日木曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第7章(入出力)、7.8(雑関数)、7.8.1(文字列操作)、7.8.2(文字クラスのテストと変換)、7.8.3(Ungetc)、7.8.4(コマンド実行)、7.8.5(記憶管理)、7.8.6(数学関数)、7.8.7(乱数発生)、演習7-9を解いてみる。

その他参考書籍

演習 7-9.

スペースを節約する形。(関数を利用)

コード

sample.c

#include <stdio.h>
#include <limits.h>

int main(int argc, char *argv[])
{
    int n, m, i, j;
    int isupper(char);
    
    n = 50;
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    for (i = 0; i < 10; i++) {
        n = isupper(i);
        for (j = 0; j < INT_MAX; j++) {
            m = isupper(j);
        }
    }
    return 0;
}

int isupper(char c)
{
    return c >= 'A' && c <= 'Z' ? 1 : 0;
}

入出力結果(Terminal)

$ time ./a.out

real 3m21.569s
user 3m8.897s
sys 0m0.682s
$ ls -l a.out
-rwxr-xr-x  1 kamimura  staff  12776 Sep  5 14:51 a.out
$

実行時間を短くする形。(マクロを利用)

コード

sample.c

#include <stdio.h>
#include <limits.h>

#define isupper(c) ((c) >= 'A' && (c) <= 'Z') ? 1 : 0

int main(int argc, char *argv[])
{
    int n, m, i, j;
    
    n = 50;
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);m = isupper(n);
    for (i = 0; i < 10; i++) {
        n = isupper(i);
        for (j = 0; j < INT_MAX; j++) {
            m = isupper(j);
        }
    }
    return 0;
}

入出力結果(Terminal)

$ time ./a.out

real 2m18.763s
user 2m18.147s
sys 0m0.205s
$ ls -l a.out
-rwxr-xr-x  1 kamimura  staff  25032 Sep  5 14:56 a.out
$

関数を使った場合のスペースは12776、マクロを使った場合のサイズは25032なので、関数を使った方がスペースの節約になっていることが確認できた。(マクロの場合、コンパイルで展開されるからサイズが大きくなる。)

実行速度について、関数を使った場合は、real 3m21.569s、user 3m8.897s、sys 0m0.682s、マクロを使った場合は、real 2m18.763s、user 2m18.147s、sys 0m0.205となり、マクロを使った方が実行速度が短くなることを確認できた。(関数の場合、関数の呼び出しによるオーバーヘッドがあるけど、マクロの場合はそれがない。)

0 コメント:

コメントを投稿