結構體A的實例占用多少內(nèi)存

結構體中成員按照定義時的順序依次存儲在連續(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é)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容