ファイル(文字数100000個)を用意し、以下のコード内のNBUFを1にした時と2048にした時で実行時間を調べたのですが、1にした時はかなりの時間がかかり2048の時は直ぐに終わりました。
自分は用意されているサイズの大きさの違いだろうと考えているのですが、正しい情報を知りたいので、詳しく解説お願いしたいです
また、下記のコードで、読み込むファイルの中の文字数が4096個のときの実行時間と8192個のときの実行時間を比べると後者の方が実行時間が短かったのですが、これはおかしい結果ですか?
#include<stdio.h> // fprintf(3) #include<stdlib.h> // exit(3) #include<unistd.h> //read(2) #include<sys/types.h> //open(2) #include<sys/stat.h> #include<fcntl.h> #define NBUF 1 // buf size void die(const char *s) { perror(s); exit(1); } void cat(const char *path) { ssize_t n; unsigned char buf[NBUF]; int fd = open(path, O_RDONLY); if (fd < 0) die(path); for (;;) { n = read(fd, buf, NBUF); if (n < 0) die(path); if (n == 0) break; if (write(STDOUT_FILENO, buf, n) < 0) die(path); } if (close(fd) < 0) die(path); } int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "useage: %s file\n", argv[0]); exit(1); } int i; for (i=1; i<argc; ++i) { cat(argv[i]); } return 0; }
> データが4096個のとき
質問者の言う「データの個数」とは何でしょうか?
そもそもこの辺を勘違いしているような気がしますが…
すみません、説明不足でした。修正しましたがいかがでしょうか?
どんな環境と方法で実行時間を計測しているのでしょう。Linux上で、timeコマンドなどを使って、でしょうか?
> 読み込むファイルの中の文字数が4096個のときの実行時間と8192個のときの実行時間を比べると後者の方が実行時間が短かったのですが、
たまたまではないですか?何十回もやって同じ結果になりますか? 最初にファイルを読んだ時と、2回目以降に読んだ時で結果が違うかもしれません。(2回目以降のファイル読み込みではシステムがキャッシュしている可能性もある)
> 読み込むファイルの中の文字数が4096個のとき
これはわかったのですが、読み込むファイルのサイズを変えて実行時間を比較したとき、利用したソースコードはNBUFの値も含めて全く同じものですか?
また、実行時間を計測するときの方法(例: timeコマンドを使う等)や「5回実行して平均を取る」などの誤差を考慮した計測などは行いましたか?
timeコマンドを使用しています。
利用したソースコードは全く同じものです。
繰り返し実行する事を怠っていました。システムがキャッシュしている可能性があるのですね、勉強になりました
大変ありがとうございます
回答欄への誤記なのでしたら、回答の削除(申請)をお願いします。
なお、質問内容は、実装でなく、実行の時間かと思いますので、表題の変更をお勧めします。
https://kotobank.jp/word/%E5%AE%9F%E8%A3%85-4256
回答3件
あなたの回答
tips
プレビュー