3

基本的に、質問の内容は、さまざまなCPUで8バイト(または4バイト)にアラインされていないMOVSDを実行すると、どうなりますか?パフォーマンスに影響はありますか、セグメンテーション違反などはありますか?

4

1 に答える 1

4

Intel仕様の第1巻、セクション4.1から

4.1.1単語、ダブルワード、クアドワード、およびダブルクアドワードの配置

単語、ダブルワード、およびクアドワードは、メモリ内で自然な境界に揃える必要はありません。ワード、ダブルワード、およびクアドワードの自然な境界は、それぞれ偶数番号のアドレス、4で均等に割り切れるアドレス、および8で均等に割り切れるアドレスです。ただし、プログラムのパフォーマンスを向上させるには、データ構造(特にスタック)を可能な限り自然な境界に揃える必要があります。この理由は、プロセッサがアラインされていないメモリアクセスを行うために2回のメモリアクセスを必要とするためです。アラインされたアクセスには、1回のメモリアクセスのみが必要です。4バイトの境界を越えるワードまたはダブルワードのオペランド、または8バイトの境界を越えるクワッドワードのオペランドは、整列されていないと見なされ、アクセスに2つの別々のメモリバスサイクルが必要です。

「通常の」状況では、調整されていないmovsdは完了するのに2サイクル必要です。

(EFLAGSで)アライメントチェックをオンにすると、CPUはAC信号を発生させます。これは主に、整列されていないアクセスを検出するのに役立つ方法として意図されています。

于 2012-03-03T04:13:16.800 に答える