1 背景
陣列:按照基本資料型別對齊,第乙個對齊了後面的自然也就對齊了。
聯合:按其包含的長度最大的資料型別對齊。
結構體: 結構體中每個資料型別都要對齊。
本文重點分析結構體的對齊方式。
2 結構體中位元組對齊的案例分析
2.1 結構體一
struct a a; // 由於本結構體最大的成員是4位元組對齊,因此本結構體整體以4位元組對齊
位元組對齊情況:
sizeof(a) = 12; // struct a以4位元組對齊,因此後面補充兩個位元組
&a.a = 0;
&a.b = 4; // 位址4位元組對齊
&a.c = 8;
2.2 結構體二
struct a ;
位元組對齊情況:
sizeof(a) = 8;
&a.a = 0;
&a.b = 2; // 位址2位元組對齊
&a.c = 4; // 位址4位元組對齊
3 g++中設定直接對齊的方法: __attribute__((packed))
#include struct a __attribute__ ((packed));
int main(void)
如上所示,新增了__attribute__((packed))後,a占用的空間為6位元組,而不是8位元組。
[1]c語言位元組對齊
[2]5分鐘搞定記憶體位元組對齊
C C 位元組對齊
什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...
c c 位元組對齊
什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...
C C 位元組對齊
概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。為什麼位元組需要對齊 根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不是自然對齊,比如為0x...