freadの実際の効果はどうですか?
質問
の宣言は
fread
は以下のようになります。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
の2つの呼び出しの読み込み性能に違いがあるかということです。
fread
:
char a[1000];
-
fread(a, 1, 1000, stdin);
-
fread(a, 1000, 1, stdin);
読み方は
1000
バイト
すぐに
となります。
どのように解決するのですか?
性能に差がある場合とない場合があります。 セマンティクスに違いがあります。
fread(a, 1, 1000, stdin);
は、それぞれ1バイトの長さの1000個のデータ要素を読み込もうとします。
fread(a, 1000, 1, stdin);
は1000バイト長の1つのデータ要素を読み込もうとします。
両者が異なるのは
fread()
は、バイト数ではなく、読み取ることができたデータ要素の数を返すからです。 1000 バイトを完全に読み込む前にファイルの終わり (またはエラー条件) に達した場合、最初のバージョンでは読み込んだバイト数を正確に示さなければなりませんが、2 番目のバージョンでは単に失敗して 0 を返します。
実際には、おそらく 1000 バイトを読み込もうとする低レベルの関数を呼び出し、実際に何バイト読み込んだかを示すだけでしょう。 より大きな読み取りを行う場合、複数の低レベルの呼び出しを行うかもしれません。によって返される値の計算は
fread()
が返す値の計算は異なりますが、その計算の費用は些細なものです。
データを読み込もうとする前に、読み込むのに十分なデータがないことを実装が判断できる場合は、違いがあるかもしれません。 たとえば、900 バイトのファイルから読み込む場合、最初のバージョンでは 900 バイトすべてを読み込んで 900 を返しますが、2 番目のバージョンではわざわざ何も読み込まないかもしれません。 どちらの場合も、ファイル位置のインジケータは 文字 すなわち 900 バイトです。
しかし一般的には、そこからどのような情報を必要とするかによって呼び方を選ぶべきでしょう。 部分的な読み取りがまったく何も読み取らないのと変わらない場合は、単一のデータ要素を読み取ります。 部分的な読み取りが有用である場合は、より小さなチャンクで読み取ります。
関連
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] LD_PRELOADのトリックとは何ですか?
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み] fread/fwriteがsizeとcountを引数に取る根拠は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] Linuxカーネルにおけるcontainer_ofマクロの理解
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?
-
[解決済み] fread/fwriteがsizeとcountを引数に取る根拠は何ですか?