0

構造体のアライメントを行う C 標準準拠の方法はありますか?

最大の要素を最初に置くことができることはわかっていますが、プロトコルを実装しようとしている状況にあります。

4

5 に答える 5

2

いいえ、一般的ではありません。

構造内の要素の順序を変更することは絶対にできません。宣言どおりの順序にする必要があります。

しかし、アラインメントに関して、将来のプロセッサが何を好むかを事前に知ることもできません。

プロトコル (「外部」表現) は、メモリ内の との間で直接コピーする必要はありません。struct代わりに、各構造体メンバーを独自にシリアル化/逆シリアル化する必要があります。

于 2013-10-28T11:20:33.110 に答える
0

C11 では、_Alignasキーワードを使用してアラインメントを指定できます ( も参照stdalign.h)。無料で公開されている C11 標準のドラフトで調べることができます。

于 2013-10-28T11:27:20.573 に答える
0

プロトコルをエンコード/デコードするためにユニオンオーバーレイのようなことを計画しているようです。これは悪い考えです。フィールドごとに適切なシリアライズ/デシリアライズを行う方がはるかに優れています。これははるかにポータブルです。

于 2013-10-28T12:50:12.310 に答える
0

ある種のディレクティブに依存することは、おそらく良い考えではありません。私はそれをしません。ここでは、カスタムのシリアライザー/デシリアライザーが標準です。

struct宣言を処理し、一連のシリアライズ/デシリアライズ関数を準備する単純なパーサーを作成することをお勧めします。単純で単純な古いデータ構造である場合、パーサーとコード ジェネレーターは非常に単純で効率的です。

于 2013-10-28T11:34:55.163 に答える