ホームページ > バックエンド開発 > C++ > C でバイナリ ファイルの書き込み速度を最大化するにはどうすればよいですか?

C でバイナリ ファイルの書き込み速度を最大化するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-15 00:31:12
オリジナル
901 人が閲覧しました

How Can I Maximize Binary File Write Speed in C  ?

C でのバイナリ ファイル書き込みにおけるデータ転送速度の向上

はじめに:

大きなバッファをバイナリ ファイルに効率的に書き込むには、多くの場合、パフォーマンス重視のアプリケーションにとって重要です。この記事では、C でこのプロセスを最適化する方法について検討します。

初期アプローチとボトルネック:

提供されたコードは、ファイルと比較してパフォーマンスが劣るようですコピー操作。潜在的なボトルネックは次のとおりです。

  • バイナリ書き込みに FILE* (標準 I/O) の代わりに fstream を使用する
  • 頻繁なシステム コールによる非効率な書き込みループ

最適化されたソリューション:

A大幅に高速なアプローチは、FILE* と fwrite を使用することです:

#include <stdio.h>

const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];

int main()
{
    FILE* pFile;
    pFile = fopen("file.binary", "wb");
    for (unsigned long long j = 0; j < 1024; ++j)
    {
        // Data generation
        fwrite(a, 1, size*sizeof(unsigned long long), pFile);
    }
    fclose(pFile);
    return 0;
}
ログイン後にコピー

このコードは、SSD の限界に近づく約 220MB/s の書き込み速度を達成しました。

さらなる改良:

コード効率をさらに向上させるために、次のように実装できます。以下:

  • std::ios_base::sync_with_stdio(false) によるストリーム同期を無効にします
  • std::vector と std::iota、std::shuffle を使用したベクトル化データ生成、および std::random_device
  • 時間測定std::chrono の使用

ベンチマークと結果:

さまざまなバッファ サイズ (1MB ~ 4GB) を使用して、さまざまなプラットフォーム (ラップトップとデスクトップ) でコードをベンチマークします。明らかになった:

  • どちらのプラットフォームでも、fstream のパフォーマンスが優れていました小さなバッファ (1MB) を使用する場合は FILE* を使用しましたが、大きなバッファでは遅れをとりました。
  • fstream は大きなバッファに対して SSD 帯域幅を完全に活用でき、FILE* のパフォーマンス上の利点がなくなりました。

結論:

要約すると、C でバイナリ ファイルに大きなバッファを効率的に書き込むには

  • 小さなバッファには std::fstream を使用する
  • 大きなバッファには FILE* と fwrite を使用する
  • std::ios ストリーム同期を無効にする
  • データ生成とベンチマーク

以上がC でバイナリ ファイルの書き込み速度を最大化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート