私は現在、ハンドヘルドポケットやセンサーからデータセンターの大型サーバーまで、幅広いマシンで動作するはずのコードを作成しようとしています。
これらのアーキテクチャ間の(多くの)違いの1つは、整列されたメモリアクセスの要件です。
「標準」のx86CPUでは、整列されたメモリアクセスは必要ありませんが、他の多くのCPUはそれを必要とし、ルールが尊重されない場合は例外を生成します。
これまで、packed属性(またはプラグマ)を使用して、危険であることがわかっている特定のデータアクセスに注意を払うようにコンパイラーに強制することでこれに対処してきました。そしてそれはうまくいきます。
問題は、コンパイラが非常に慎重であるため、プロセスで多くのパフォーマンスが失われることです。
パフォーマンスが重要であるため、厳密に調整されたCPUで特に機能するように、コードの一部を書き直すことをお勧めします。一方、このようなコードは、アラインされていないメモリアクセス(x86など)をサポートするCPUでは低速になるため、厳密にアラインされたメモリアクセスを必要とするCPUでのみ使用します。
そして今、質問:コンパイル時に、ターゲットアーキテクチャが厳密に調整されたメモリアクセスを必要とすることをどのように検出するのですか?(またはその逆)