結構體中成員按照定義時的順序依次存儲在連續(xù)的內(nèi)存空間。但并不是像數(shù)組那樣的連續(xù)。
內(nèi)存對齊計算內(nèi)存地址比較方便,內(nèi)存地址會非常有規(guī)律,減小了內(nèi)存尋址時間。若不對齊,
內(nèi)存地址的變化非常沒有規(guī)律,內(nèi)存地址往往是在寄存器里計算出來的基本類型指的是像
char、int、float、double這樣的內(nèi)置數(shù)據(jù)類型
結構體總大小大于等于所有成員的大小之和。
結構體的總大小必須可以整除最寬基本成員。
結構體成員的地址 - 結構體的首地址 = 偏移量,必須是當前成員整數(shù)倍。
結構體尾部不足的部分,就會被填充。 整數(shù)包括正整數(shù)、0、負整數(shù)。
當只用一個成員時不存在對齊。
兩者取最短原則。
實例:
struct A{
char a;
short b;
int c;
float d;
long e;
double f;
};//結構體A的實例占用多少內(nèi)存
int main(int argc, const char * argv[]) {
struct A a;
printf("A = %lu個字節(jié)\n",sizeof(a));
printf("char = %lu個字節(jié)\n",sizeof(char));
printf("short = %lu個字節(jié)\n",sizeof(short));
printf("int = %lu個字節(jié)\n",sizeof(int));
printf("float = %lu個字節(jié)\n",sizeof(float));
printf("long = %lu個字節(jié)\n",sizeof(long));
printf("double = %lu個字節(jié)\n",sizeof(double));
return 0;
}
結果為
A = 32個字節(jié)
char = 1個字節(jié)
short = 2個字節(jié)
int = 4個字節(jié)
float = 4個字節(jié)
long = 8個字節(jié)
double = 8個字節(jié)