データのアライメントの理解

境界でデータをアライメントすると、パフォーマンスが向上します。このため、インテル(R) コンパイラーは、境界でデータのアライメントを行おうとします。しかし、この結果、パフォーマンス問題が発生することがあります。まず最初にコンパイラーを使用して最適化を試みるようにしてください。詳細は、「最適化オプションのまとめ」を参照してください。

パフォーマンス問題を回避するには、以下のアーキテクチャー別のガイドラインに従ってください。

IA-32 アーキテクチャー、インテル(R) 64 アーキテクチャー、IA-64 アーキテクチャー:

IA-32 アーキテクチャーおよびインテル 64 アーキテクチャー:

IA-64 アーキテクチャー:

一般的に、キャッシュにデータを保持する方が、アライメントされたデータを保持するよりもパフォーマンスに与える影響は少なくなります。上記の規則に沿ったテクニックを使用するようにしてください。

パック

構造体が pack プラグマでパックされると、構造体の内部メンバーへのポインターはアライメントされていないアクセスになります。アライメントされていないアクセスを行うと、IA-64 アーキテクチャー・ベース・システムのアプリケーションは、デフォルトで早期に終了します。WINAPI 関数 seterrormode を呼び出すことで、この制限を回避できます。条件は致命的ではありません、少し効率的でないだけです。

IA-64 アーキテクチャー用コンパイラーでは、パックされた構造体はサイズが小さくなりますが非常に遅くなります。アライメントされていないデータにアクセスすると、ほぼ毎回ソフトウェア例外が発生します。