FreeBASIC DevStructLayout
目次→FreeBASIC のハッキング→FreeBASIC でのハッキングのための情報→Structure packing/field alignment←オリジナル・サイト
構造 パッキング/項目 調整
FreeBASICの Type と Union の既定レイアウトは、GCC のレイアウトと互換性があります。SysV(Linux/BSD)とマイクロソフト(Windows)ABIs に準拠しているからです。
これは、GCC および他のコンパイラと、バイナリの互換性があることを意味します。
デフォルトで、項目は、その本来の境界で整列します。以下のように、:
- 1-byte data types に対して、1の倍数
- 2-byte data types に対して、2の倍数
- 4-byte data types に対して、4の倍数
- 8-byte data types に対して、4の倍数 (32bit x86 DOS(DJGPP)/Linux/BSD)
- 8-byte data types に対して、8の倍数(Win32/Win64, 32bit ARM Linux, 64bit x86_64/AArch64 Linux/BSD)
- Type/Union データ型の項目の、最大の自然数の限度
- 動的文字列記述は、最大の自然な調整によるデータ・ポインタ項目をもった Type 構造として取り扱われます。
- 固定長文字列は、文字サイズのために必要な配置に従って位置合わせされます。
- 静的配列は、要素データ型のために必要な配置によって整列します。
コンパイラーは、項目の自然的境界に相当するオフセットに項目を移動させるために、項目の前に詰め物バイトを挿入して、項目を整列させます。あるいは、Field で与えられた値が項目の自然な整列より小さい場合には、Field = N で与えられた値の倍数にするために、項目の前に詰め物バイトを挿入して、項目を整列させます。
x86 アーキテクチャーでは、このような適切な配置は必要ありませんが、項目にアクセスする場合に、よりよいパフォーマンスが期待できます。
他のアーキテクチャーは、実際に適切な配置を要求するかもしれません。
構造全体のサイズは、項目配置に加えて、構造の終端に詰め物バイトを加えることにより、その項目の最大の自然な整列の倍数まで、切り上げられます。
これは、そのような構造の配列の中で、個々のものが、項目によって要求されるように、適切に位置合わせされることを保証します。
ページ歴史:2016-02-10 15:49:07
日本語翻訳:WATANABE Makoto、原文著作者:DkLwikki