【C語言】結構體占用字節數及存儲與空間分配


我們都知道在數據類型中,char類型占1個字節,short占2個字節,int占4個字節,long占8個字節等等。

在計算結構體大小時需要考慮其內存布局,結構體在內存中存放是按單元存放的,每個單元多大取決於結構體中最大基本類型的大小,下面我們看幾個例子:

 

1.

struct A
{
  char a;
  int b;
  short c;
}str1;

這里char占1個字節,int占4個字節,short占2個字節,按單元存放如下圖:

  1  2  3  4

a      
b b b b
c c    

 

 

 

由於a占用了1個字節,b存不下,所以開辟新的單元存放b,然后再開辟新的單元存放c。

從這里可以看出結構體在內存中是按單元存放的,總占用字節數就是3*4=12

 

2.

struct B
{
  char a;
  short c;
  int b;
}str2;

存放如圖:

  1  2  3  4

a  
b b b b

 

 

 

在這里由於b占用4個字節,而a和c總共才占用3個字節,足夠c存放,所以c存放在a的后面,再開辟新的單元存放b。

此例中占用字節數為2*4=8

 

3.

struct c
{
  char a;
  char b[2];
  char c[4];
}str3;

存放如圖:

  1  2  3  4  5  6  7

a b b c c c c

 

 

這里由於數據類型都為char類型,故不必再開辟新的單元,一行存完。

占用字節數為1*1+2*1+4*1=7

 

綜上所述,結構體在內存中存放是按單元存放的,所開辟單元的最大長度取決於占字節最大的數據類型,此外我們可以發現存儲順序對空間的使用率有一定的影響。

從以上三例可以看出,第一種最浪費空間;第三種最節省空間,但全使用相同類型,丟失了字段本生的數據類型,不方便使用;第二種介於第一種和第三種寫法之間,其空間上比較緊湊,同時又保持了結構體中字段的數據類型。大家可以嘗試用sizeof()去深入了解結構體中的按單元存放。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM