0

Windows から Linux (Red Hat Linux または Fed) にコードを移植しています。既存のコードでは、(datatype UNALIGNED*) 参照を持つコードを見つけました。

教えてください。1) Linux への移植には UNALIGNED メモリ アクセスが必要です。2) 必要な場合は、同じことを実現する方法を教えてください。

Linuxバージョンを探しました。arm/unaligned.h の使用に遭遇しました。同じものを追加しようとすると、「そのようなファイルまたはディレクトリはありません」というエラーが表示されます。

ありがとう。

4

2 に答える 2

1

最近gccでは、使用を検討するかもしれません__attribute__ ((__packed__))

ただし、可能な限り使用を避けることをお勧めします。コンパイラは、フィールドの整列に関して非常に優れた仕事をします。また、ABI は調整のルールを定義する場合があります。

UNALIGNEDソース コードで;を使用する理由を理解する必要があります。データに外部定義された形式があるためですか、それとも「パフォーマンス」上の理由ですか? 最適化はコンパイラにお任せください!

于 2012-05-29T04:50:55.607 に答える
1

アライメントは、OS の問題ではなく、CPU の制限です。x86 CPU はアライメントされていないアクセスを行うことができます (パフォーマンスがいくらか低下します)。他の多くの CPU では、アライメントされたポインター以外のものからワードをロードしようとすると、同じ Linux (またはその他のバージョン) でバス エラーが発生します。

MSVC の UNALIGNED キーワードは、x86 では、私の知る限り、無駄です。他のアーキテクチャでは、アクセスが正常に完了することを確認するために、より複雑な命令シーケンスを発行します。gccに相当するものを見つけようとしていますか? 存在するとは思えません。

于 2012-05-29T03:42:22.347 に答える