3
int readint(__packed int *data)
{
    return *data;
}

パディングを避けるため__packedに宣言で属性を見てきました。ただし、関数の引数で属性structを使用する利点は何ですか。__packed

著者__packed、整数がアラインされていない可能性があることをコンパイラに伝えていたと言います。どういう意味ですか?

編集:以下はgccコンパイラで動作しますか

int readint(__attribute__((packed)) int *data)
{
    return *data;
}
4

1 に答える 1

6

修飾子は、 ARM によって公開された C コンパイラのコンパイラ__packed固有の機能です。完全な説明はドキュメントにありますが、簡単に言えば、修飾されたオブジェクトにアラインメントのためのパディングを挿入してはならず、この修飾子を持つポインターは、アラインメントがずれている可能性があるかのようにアクセスする必要があることを示しています。(これにより、一部のプロセッサでは生成されるコードが遅くなる可能性があるため、むやみに使用しないでください。)armcc

これは、タイプ定義にのみ適用されるGCC 属性と同じではないことに注意してください。packedstructunion

于 2015-01-28T07:15:32.573 に答える