最適化されたコード、実装の明確さ、効率、および移植性の観点から、誰かが設計のトレードオフを正当化するかどうかをどのように選択しますか?
この質問の目的に関連する例は、大きなファイルの処理である可能性があります。ここで、「大きなファイル」は、ランダムアクセス方法を使用して単純化される問題の「かなりの数GB」です。
このファイルを読み取って変更するためのアプローチは次のとおりです。
- とにかくストリームを使用し、目的の場所を探します。これは移植可能ですが、速度が遅くなる可能性があり、明確ではありません。これは、実質的にすべてのOSで機能します。
- ファイルの関連部分を大きなブロックとしてマップします。たとえば、チャンクごとに、処理するファイルの50MBチャンクをmmapします-これは、そのシステムにmmapを実装する微妙さに応じて、多くのOSで機能します。
- ファイル全体をmmapするだけです。これには64ビットOSが必要であり、これを実装するための最も効率的で明確な方法ですが、32ビットOSでは機能しません。