#pragma pack(L1_CACHE_LINE)
struct A {
//...
};
#pragma pack()
A a;
と
struct A {
//...
};
A a __attritube__((aligned(L1_CACHE_LINE)))
それらの違いは何ですか?
#pragma pack(L1_CACHE_LINE)
struct A {
//...
};
#pragma pack()
A a;
と
struct A {
//...
};
A a __attritube__((aligned(L1_CACHE_LINE)))
それらの違いは何ですか?
#pragma pack(byte-alignment)は、byte-alignment入力で指定された構造体の各メンバー、またはそれらの自然な整列境界のいずれか小さい方に影響します。
変数(または構造体内で指定されている場合は構造体フィールド)の__attribute__((aligned(byte-alignment)))
最小配置に影響します
以下は同等だと思います
#define L1_CACHE_LINE 2
struct A
{
u_int32_t a __attribute__ ( (aligned(L1_CACHE_LINE)) );
u_int32_t b __attribute__ ( (aligned(L1_CACHE_LINE)) );
u_int16_t c __attribute__ ( (aligned(L1_CACHE_LINE)) );
u_int16_t d __attribute__ ( (aligned(L1_CACHE_LINE)) );
u_int32_t e __attribute__ ( (aligned(L1_CACHE_LINE)) );
};
#pragma pack(L1_CACHE_LINE)
struct A
{
u_int32_t a;
u_int32_t b;
u_int16_t c;
u_int16_t d;
u_int32_t e;
};
#pragma pack()
ここで、Aは、内部が2バイトに整列さa __attritube__((aligned(L1_CACHE_LINE)))
れることを保証しますが、他の変数を同じ方法で整列しません。u_int32_t a
struct A
参照: