タグ付けされた質問 「pragma-pack」

11
#pragma packエフェクト
誰かが#pragma packプリプロセッサステートメントの機能を説明できるかどうか、さらに重要なことには、なぜそれを使用する必要があるのか​​と思っていました。 いくつかの洞察を提供してくれたMSDNページをチェックアウトしましたが、経験のある人からもっと聞いてもらいたいと思っていました。以前はコードで見たことがありますが、もうどこにあるかわかりません。

5
gccの__attribute __((packed))/ #pragma packは安全ではありませんか?
Cでは、コンパイラーは構造体のメンバーを宣言された順序でレイアウトし、メンバー間に、または最後のメンバーの後に挿入される可能性のある埋め込みバイトを使用して、各メンバーが適切に配置されるようにします。 gccは言語拡張を提供します__attribute__((packed))。これは、パディングを挿入しないようにコンパイラーに指示し、構造体メンバーを誤って調整できるようにします。たとえば、システムが通常すべてのintオブジェクトに4バイトアラインメントを必要とする場合、構造体メンバーが奇数のオフセットに割り当てられる__attribute__((packed))可能性がありintます。 gccドキュメントの引用: 「packed」属性は、「aligned」属性でより大きな値を指定しない限り、変数または構造体フィールドが可能な限り最小のアライメントを持つことを指定します。変数には1バイト、フィールドには1ビットです。 コンパイラーは(一部のプラットフォームでは)一度に1バイトずつ誤って配置されたメンバーにアクセスする必要があるため、この拡張機能を使用すると、データ要件は小さくなりますが、コードは遅くなります。 しかし、これが安全でないケースはありますか?コンパイラーは常に、パックされた構造体の誤って配置されたメンバーにアクセスするための正しい(低速ですが)コードを生成しますか?すべての場合にそれを行うことは可能ですか?
164 c  gcc  pragma-pack 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.