資料的對齊

2021-04-20 13:30:10 字數 363 閱讀 5258

linux沿用的對齊策略是2位元組資料型別(例如 short)的位址必須是2的倍數,而較大的資料型別(例如 int、int *、float 和 double)的位址必須是4的倍數。

注意,這個要求就意味著乙個short型別物件的位址的最低位必須等於0。類似地,任何 int 型別的物件或指標的位址的最低兩位必須都是0。

microsoft windows對對齊的要求更嚴格——任何k位元組(基本)物件的位址都必須是k的倍數。特別低,它要求乙個 double 的位址應該是8的倍數。這種要求提高了儲存器效能,代價是浪費了一些空間。linux中的設計決策可能對 i386 很好,以前儲存器十分缺乏,而儲存器匯流排只有4個位元組寬。對於現代處理器來說,microsoft的對齊策略是更好的選擇了。

c c 資料對齊

為了避免混淆,做如下規定,以下 若不加特殊說明都執行於32位平台,結構體的預設對齊值是8,各資料型別所佔位元組數分別為 char佔乙個位元組 int佔四個位元組 double佔八個位元組。請問下面的結構體大小是多少?struct test 複製 這個呢?struct test1 複製 在公布答案之前...

C C 資料對齊

為了避免混淆,做如下規定,以下 若不加特殊說明都執行於32位平台,結構體的預設對齊值是8,各資料型別所佔位元組數分別為 char佔乙個位元組 int佔四個位元組 double佔八個位元組。請問下面的結構體大小是多少?struct test 這個呢?struct test1 在公布答案之前先看一下對齊...

C C 資料對齊

為了避免混淆,做如下規定,以下 若不加特殊說明都執行於32位平台,結構體的預設對齊值是8,各資料型別所佔位元組數分別為 char佔乙個位元組 int佔四個位元組 double佔八個位元組。請問下面的結構體大小是多少?struct test 這個呢?struct test1 在公布答案之前先看一下對齊...