我在64位Linux机器上有以下结构。64位机器上的结构对齐
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
where
typedef struct {
raw_spinlock_t raw_lock;
} spinlock_t;
and
struct list_head {
struct list_head *next, *prev;
};
raw_spinlock_t is defined as:
typedef struct {
volatile unsigned int slock;
} raw_spinlock_t;
现在我想明白了结构__wait_queue_head的64位Linux机器上的LP64标准以下的对齐方式。从我所知道的,因为这个结构的第一个领域即。
spinlock_t lock
是一个无符号的int,它占据着64位机器上的4个字节,这个结构应在4字节对齐地址开始。不过,我已经看到,真正的系统并非如此。相反,该结构始于8字节对齐地址,但第一个字段的对齐要求将通过4字节对齐地址来满足。基本上,管理结构的对齐是什么?请注意,我很清楚结构中字段的填充概念。结构本身的对齐要求是我发现混淆的。
如果我明白你的意思,编译器会将每个字段放在8字节对齐的位置以提高性能?寄存器是64b,因此它们可以一次加载.. – fduff 2012-04-12 12:35:52
并非每个字段都是8字节对齐的。像unsigned short这样的数据类型是2字节对齐的,而unsigned int是4字节对齐的。对于结构变量的“外部”,变量需要在'sizeof(variable)'字节对齐的地址对齐。 – gjain 2012-04-12 16:41:27