大規模なコレクションで使用されるパフォーマンスのための構造の理想的なサイズは32バイトです。これは本当ですか、なぜですか?これは64ビットプロセッサに影響するのでしょうか?現代システムの最適構造サイズ
これは、最新の(2008+)家庭用インテルベースのシステムのコンテキストです。
大規模なコレクションで使用されるパフォーマンスのための構造の理想的なサイズは32バイトです。これは本当ですか、なぜですか?これは64ビットプロセッサに影響するのでしょうか?現代システムの最適構造サイズ
これは、最新の(2008+)家庭用インテルベースのシステムのコンテキストです。
構造の理想的なサイズは、1つのキャッシュライン(またはその部分数)である可能性があります。レベル1のキャッシュラインは、通常32または64 バイトです。キャッシュライン境界を越えてデータ構造の要素を分割するには、1つではなく2つのメインメモリアクセスが必要です。
コンパイラが構造体を最適化してレジスタに収まるようにすると、キャッシュラインサイズとレジスタサイズの関係はどうなりますか? –
私はこの回答に同意しません。あなたの構造体が1ビットのデータしか含んでいなければ、それぞれ32バイトまたは64バイトを無駄にするだけで、もっと多くのキャッシュラインが無駄になります。このような無駄なパディングを持つのが唯一の時間となるのは、オブジェクトの数が非常に少なく、異なるコア上で実行されている異なるスレッドからアクセスされている場合です。 –
@ Loki:コンパイラは、このような構造体サイズで実際に自由にプレイすることはできません。固定されたABIを持っていなくても、Cの標準では要素の初期サブシーケンスが一致する構造の相対配置に必要条件があり、複数の構造体のサイズを同時にパディングで最適化することは不可能です。 –
私はあなたの質問に合理的な答えがあるとは思わない。アプリケーションのコンテキストに関する情報がない場合、「構造の理想的なサイズ」は、方法が不明です。
32ビットは1つの現代的な整数のスペースです - 2つの文字やビットフィールド以外の "構造体"には十分ではありません。
質問は "32 **バイト**"ビットではないと言います。 Markgzは、これが単一のキャッシュラインでうまくいくことを正しく指摘しています。 – MSalters
structの理想的なサイズは、必要な情報を保持するのに十分です。
+1は鈍く、ポイントにまっすぐです。 – Mysticial
+1とにかく私の答えはもう少し詳細なバージョンだと思います。 :-) –
@R ..:私は実際にそれについて少し詳しく説明しようとしていましたが、私は出発しなければなりませんでした。今私はちょうどそれを残しておくと思います。 –
構造体に最適なサイズは、通常、ビット・ツイドリング/ミス・アライン・アクセスなどのハッキングを必要とせずに、格納するデータを格納するのに必要な最小サイズです。
おそらく、最大効率的な読み取り/書き込みアラインメントサイズ、またはキャッシュと関係するものに基づいています。 Meh!これも渡されます。 – dmckee
一部のアプリケーションでは、整列はサイズよりもはるかに重要です。 – Flexo
32bitの制限から、これは、より高速なアクセスと使用のために、構造体全体をレジスタに入れることができると考えられます。 – Odinn