質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

998閲覧

実装時間の違いについて

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2021/05/19 10:10

編集2021/05/19 10:51

ファイル(文字数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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/05/19 10:35

> データが4096個のとき 質問者の言う「データの個数」とは何でしょうか? そもそもこの辺を勘違いしているような気がしますが…
退会済みユーザー

退会済みユーザー

2021/05/19 10:51

すみません、説明不足でした。修正しましたがいかがでしょうか?
dodox86

2021/05/19 11:04

どんな環境と方法で実行時間を計測しているのでしょう。Linux上で、timeコマンドなどを使って、でしょうか? > 読み込むファイルの中の文字数が4096個のときの実行時間と8192個のときの実行時間を比べると後者の方が実行時間が短かったのですが、 たまたまではないですか?何十回もやって同じ結果になりますか? 最初にファイルを読んだ時と、2回目以降に読んだ時で結果が違うかもしれません。(2回目以降のファイル読み込みではシステムがキャッシュしている可能性もある)
mather

2021/05/19 11:06 編集

> 読み込むファイルの中の文字数が4096個のとき これはわかったのですが、読み込むファイルのサイズを変えて実行時間を比較したとき、利用したソースコードはNBUFの値も含めて全く同じものですか? また、実行時間を計測するときの方法(例: timeコマンドを使う等)や「5回実行して平均を取る」などの誤差を考慮した計測などは行いましたか?
退会済みユーザー

退会済みユーザー

2021/05/19 11:11

timeコマンドを使用しています。 利用したソースコードは全く同じものです。 繰り返し実行する事を怠っていました。システムがキャッシュしている可能性があるのですね、勉強になりました 大変ありがとうございます
YT0014

2021/05/20 01:29

回答欄への誤記なのでしたら、回答の削除(申請)をお願いします。 なお、質問内容は、実装でなく、実行の時間かと思いますので、表題の変更をお勧めします。 https://kotobank.jp/word/%E5%AE%9F%E8%A3%85-4256
guest

回答3

0

readwriteは、そのままシステムコールと対応しています。
同じファイルを、1バイトずつreadするのは1000バイトずつreadするのに比べると時間が1000倍までは行かないまでも数百倍かかります。システムコールの回数が1000倍になるので。

タイトルの漢字が間違ってますね。

投稿2021/05/19 11:08

otn

総合スコア84798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/19 11:12

ご丁寧にありがとうございます!
guest

0

間違えてここに書き込んでしまいました

投稿2021/05/19 10:29

編集2021/05/19 10:31
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

たんにreadの実行回数の違いで時間が違うってことですね。
ファイルの入出力は内部でバッファリングされてますんで、1バイト読むのも2Kバイト読むのも実行時間は変わりません。

投稿2021/05/19 10:19

編集2021/05/19 10:19
y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/19 10:32

ありがとうございます! すみません、質問の内容を追加したのですが確認していただけますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問