我在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