結構體內存分析

一.結構體的構成

結構體是由多個成員構成,成員的類型可以是基礎數(shù)據(jù)類型(int、double、bool等)、指針或是其他的結構體。一下是一個結構體的例子:

typedef struct PersonStruct {
    double height;      
    char   firstName;   
    int    age;         
    short  weight;      
} PersonStruct;

二.計算結構體尺寸大小的規(guī)則

1.數(shù)據(jù)成員對齊規(guī)則:

第一個數(shù)據(jù)成員要放在0的起始位置,之后的成員位置的起始位置要根據(jù)自身的大小的整數(shù)倍去存放。

2.結構體作為成員:

結構體作為成員時,自身的存儲位置要根據(jù)結構內的最大成員的整數(shù)倍去存儲

3.收尾:

結構體的總大小一定是結構體內最大成員的整數(shù)倍,實際大小如果不夠,則需要進行補齊。

以64位為例:

height的大小為8,firstName的大小為1,age的大小為4,weight的大小為2。根據(jù)規(guī)則可得這些成員所占位置為:
height:0-7
firstName:8
age:12-15
weight:16-17
可得結構體PersonStruct的實際大小為18,根據(jù)規(guī)則3以8的整數(shù)倍進行補齊可得PersonStruct的大小為24。


圖例.png

根據(jù)圖例可以看出,這樣會出現(xiàn)留空的情況,會產生出較多的內存浪費,所以可以優(yōu)化結構體的成員排列:

typedef struct PersonStruct {
    double height;     
    int    age; 
    short  weight;
    char   firstName;  
} PersonStruct;

這樣排列會使得結構體PersonStruct的大小由24變?yōu)?6:


更新排版.png

降低了內存的占用。

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

友情鏈接更多精彩內容