程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【C語言】結構體占用字節數及存儲與空間分配,字節數

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

編輯:關於C語言

【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 c  c    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()去深入了解結構體中的按單元存放。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved