C语言结构体的存储分配
生活随笔
收集整理的這篇文章主要介紹了
C语言结构体的存储分配
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.簡介
若結(jié)構(gòu)體里面包含多種數(shù)據(jù)類型,其如何在內(nèi)存中分配存儲空間呢?
編譯器在處理結(jié)構(gòu)體空間分配時,采取的是對齊方式,按照結(jié)構(gòu)體中成員中成員類型字節(jié)數(shù)最大的為標(biāo)準(zhǔn),從上往下對結(jié)構(gòu)體成員進(jìn)行賦值,若當(dāng)前成員的字節(jié)數(shù)小于最大成員字節(jié)數(shù),接著為下一個連續(xù)分配內(nèi)存,若下一個的內(nèi)存分配后會大于最大成員字節(jié)數(shù),則為當(dāng)前成員補(bǔ)齊至最大成員字節(jié)數(shù)。
2.具體解析
#include<stdio.h>typedef struct node {char a; //1字節(jié)float b; //4字節(jié)double c; //8字節(jié)int *p; //由編譯器決定 }pnode; int main(int argc, char const *argv[]) {/* code */pnode n;printf("字節(jié)數(shù)為:%lu\n",sizeof(n) );return 0; }這里的字節(jié)數(shù)計算:最大字節(jié)數(shù)為c變量,8字節(jié),接著分配時:
a :1? ? ? ? sum=1<8
b:? ? 4? ? ? ? sum=1+4<8
c :? ? 8? ? ? ? sum=5+8>8 ,補(bǔ)齊3個字節(jié)后再為c分配,sum=5+(3)+8=16
d:? ? ?8(指針根據(jù)最大字節(jié)數(shù)來分配)? ? sum=16+8=24
結(jié)果為24字節(jié)。
改變下順序
#include<stdio.h>typedef struct node {char a; //1字節(jié)double b; //8字節(jié)float c; //4字節(jié) int *p; //由編譯器決定 }pnode; int main(int argc, char const *argv[]) {/* code */pnode n;printf("字節(jié)數(shù)為:%lu\n",sizeof(n) );return 0; }輸出字節(jié):1+(7)+8+4+(4)+8=32
總結(jié)
以上是生活随笔為你收集整理的C语言结构体的存储分配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用指针来表示二维数组的方法
- 下一篇: 0/1背包问题——动态规划方法