インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
これは、よく理解している特定の状況でのみ使用すべきです。このオプションでビルドされていないほかのオブジェクトやライブラリーとリンクすると、正当性の問題が発生する可能性があります。このトピックは、IA-32 アーキテクチャー・ベースの Linux* システムにのみ適用されます。
32 ビットの Linux* ABI では、スタックは 4 バイト・アライメントのみ維持する必要があるとしています。しかし、最近のアーキテクチャーのパフォーマンス上の理由から、GCC と ICC はスタック上で 16 バイト・アライメントを維持します。16 バイト・アライメントを維持するには、関数のエントリーについてスタックを調整するため、追加の命令が必要になります。これは、コードサイズに影響し、特に小さなルーチンを多く含むコードに大きく影響します。
一部のケースでは、コンパイラー・オプションを指定することで、4 バイト・アライメントを維持するように ICC を戻して、追加のスタック調整命令を排除することができます。
このオプションは、次のいずれかに該当する場合のみ使用します。
コードが、このオプションなしでビルド可能なほかのオブジェクトやライブラリーを呼び出していないため、呼び出し時にスタックが 16 バイトでアライメントされていることに依存している可能性がある場合。
コードが、インテル® SSE に対応していないアーキテクチャーをターゲットとしているため、正当性の理由から 16 バイト・アライメントが不要な場合。
指定するオプション:
Linux*: | -falign-stack=assume-4-byte |
macOS*: | なし |
Windows*: | なし |
メリット |
|
デメリット |
16 バイトでアライメントされたスタックに依存するほかのオブジェクトやライブラリーとリンクする場合、互換性の問題が生じることがあります。 |
注:
コードの特性によっては、このオプションはバイナリーサイズを増加させることがあります。