マイクロ最適化を開始することは私の目標ではないので、もしそれが最終的な結果になるのであれば、喜んで質問を取り下げます。しかし、私はいくつかの設計上の決定を始めようとしており、より多くの情報を得たいと思っています.
明確に定義された形式で文書化された多数のデータ構造を含むファイル形式を読み取って処理しています。それらを構造体としてコードで表現しました。
ここで、構造体を 1 バイト アラインメントで 1 つパックすると#pragma pack(1)
、IO ストリームから構造体ポインターに直接構造体を読み取ることができます。これは便利です。構造体をパックしない場合はfread
、フィールドを 1 つずつ、または一fread
度にブロックしreinterpret_cast
、構造体フィールドを 1 つずつパックすることができます。これはおそらくすぐに古くなります。
参考までに、構造体は (潜在的に) 数千単位で読み取られ、いくつかの処理が実行される可能性があります。これらは、ほとんどが符号なし 16 ビット整数 (約 60%)、符号なし 32 ビット整数 (約 30%)、および一部の 64 ビット整数で構成されています。
そこで当面の問題は、私は...
- 何万もの小さな通話を行い
fread
ますか? - チャンクを読み取り、関連するバイトをコピーしますか?
- 構造体をパックして、それらを直接読み取りますか?