#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) 影响结构的每个成员,由字节对齐输入指定,或在它们的自然对齐边界上,以较小者为准。
__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()
哪里是 Aa __attritube__((aligned(L1_CACHE_LINE)))
将确保u_int32_t a
内部struct A
将与 2 个字节对齐,但不会以相同的方式对齐其他变量。
参考: