で割り切れるアドレスに整列されなければならないことを意味し、私はあなたのWiki
からいくつかのデータ
データ構造のアライメントをさせていただきたいと思いデータがコンピュータメモリに配置されアクセスされる方法です。これは2つの別々の、しかし関連する問題:データアライメントとデータ構造のパディングから構成されます。
最新のコンピュータがメモリアドレスを読み書きする場合、これはワードサイズのチャンク(32ビットシステムの4バイトチャンクなど)で行います。 データ整列は、ワードサイズの倍数に等しいオフセットでデータを格納することを意味し、CPUがメモリを処理する方法によりシステムのパフォーマンスを向上させます。データを整列させるために
、データ構造パディングであり、最後のデータ構造の終わりと次の開始との間のいくつかの無意味なバイトを挿入する必要があるかもしれません。
gccは構造体の埋め込みを回避する機能を提供します。すなわち、場合によってはこの無意味なバイトを避ける。
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}sSampleStruct;
sizeof(sSampleStruct)
次のような構造を検討しているため、構造体のパディングの12ではなく8になります。デフォルトでは、X86では構造体が4バイト境界にパディングされます。
typedef struct
{
char Data1;
//3-Bytes Added here.
int Data2;
unsigned short Data3;
char Data4;
//1-byte Added here.
}sSampleStruct;
我々は、特定の(X)サイズのパディングを主張する__attribute__((packed, aligned(X)))
を使用することができます。 Xは2の累乗でなければなりません。here
typedef struct
{
char Data1;
int Data2;
unsigned short Data3;
char Data4;
}__attribute__((packed, aligned(1))) sSampleStruct;
を参照してくださいので、上記の指定されたgccの属性は、構造体のパディングを許可していません。サイズは8バイトになります。 //gcc.gnu:あなたはすべての構造のために同じことをしたい場合は
は、単に我々はそれが[「type属性」](HTTPだ#pragma
#pragma pack(push, 1)
//Structure 1
......
//Structure 2
......
#pragma pack(pop)
を使用してスタックするアライメント値をプッシュすることができます。 org/onlinedocs/gcc/Type-Attributes.html)(Googleで "C属性がパックされている"ということがわかりましたが、確かに他の人は少なくとも良いことをすることができます) –
[この質問を参照](http:// stackoverflow。 com/q/8568432/827263) - 'aligned(4)'ではおそらくあまり心配する必要はありません。 –