詳細解釋如何計算一個結構體的大小?


其他:

1.數組下標可爲負:a[-1]  相當於  a+(-1);

2.聯合體大小就是成員中最大類型的大小;

如何計算一個結構體的大小?

      例如:

struct Test{

int Num;

char *name;//指針大小取決於編譯器的位數  ,64位  爲:8字節     32位爲:4字節

short date;

char ch;

}*p;

總結計算大小規則:

 1.其大小也與成員順序有關係,因爲前一個成員地址需要與下一個成員地址構成需要滿足地址對齊,即當前所佔字節數需爲當前編譯器寬度的整數倍

    如以上結構體(假設編譯器爲64位):int   num  佔4字節,下一成員char * name 佔用8字節

                                                                 首先4+8=12>8,即編譯器寬度(即指針所佔大小:8)存放不下,故第一個成員補全爲編譯器寬度爲8字節,(需保持和下一成員地址對齊,如果當前幾個數據成員地址實現對齊,則從下一個成員爲起點再重複以上規則))

    接下來:short  date 佔用2字節,char ch 佔用1字節     2+1=3字節,一個地址寬度能放下,但8+8+3=19不是8的倍數,故需要補齊,其實就是再補5個字節,故此結構體大小爲:24字節

注意:如何補?補幾個字節,取決於編譯器寬度,和其中佔用內存大小最大的成員,如過超過編譯器寬度,以其數據成員所佔內存大小爲對齊基準,否則補齊到編譯器寬度即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章