通常の経験則(IntelsとAMDの最適化マニュアルからまっすぐです)は、すべてのデータ型を独自のサイズで整列させる必要があります。 int32
は32ビット境界に、int64
は64ビット境界にアライメントしなければなりません。 charはどこにでもうまく収まるでしょう。
もう1つの経験則は、もちろん「コンパイラはアラインメント要件について語られています。コンパイラーはデータへの効率的なアクセスを可能にするために正しいパディングとオフセットを追加することを知っているので、それを心配する必要はありません。
唯一の例外は、ほとんどのコンパイラで手作業でアライメントを確保する必要があるSIMD命令で作業する場合です。それが正しい場合
第二に、そしてある は、8バイト境界上のデータ構造体を整列させるべきです。しかし私は 人がこれらのプロセッサの代わりに4バイトのアラインメント を使用しているのを見ました。
どのように違いがあるかわかりません。 CPUは、これらの4バイトを含む64ビットブロックの読み取りを発行するだけです。つまり、要求されたデータの前に4バイト余分になるか、それ以降に余分なバイトが得られます。しかし、どちらの場合も、1回の読み込みだけが必要です。 32ビット幅のデータの32ビットアライメントは、64ビット境界を越えないようにします。
私はこの質問が何を意味するのか分かりませんが、これがプログラミングにどのように関係しているのか、そしてこれがどのように私に影響するのかに興味を持っています。この低レベルタイプのものの基本的なイントロをどこで読むことができますか? –
「すべてのプログラマがメモリについて知っておくべきこと」を参照してください:http://people.redhat.com/drepper/cpumemory.pdf – Crashworks
「要求された読み込みは常に8の倍数です。 8バイトの境界 "?私はこれらの間の論理的な接続を見ません。データが8バイトの境界を横切っていない限り、私たちは良いですね。 – jalf