若靜態變數 static int i; 是全域性變數,則 sizeof(i) = 4; //儲存在靜態區
若靜態變數存在於結構體或類中,則sizeof(a) = 1;//靜態變數也儲存於靜態區,結構體的大小只計算非靜態變數。
對空類或結構體,使用sizeof會返回1;//因為,如果類或結構體占用記憶體為0話,無法例項化並區分,故編譯器為了使空類能夠例項化分配了1byte。
structa ;如果類中存在虛函式的話,類的大小增加乙個指向虛函式表的指標的大小。int a::i = 1;
結構體位制
當資料儲存不需要占用完整的乙個位元組,只需要幾位或者一位二進位制位的時候,為了節省空間,c語言提出的一種資料結構,稱「位域」或者「位段」。位域即把乙個位元組按位劃分成區域。
經測試,發現結構體位制以下特點:
1. 位域的成員可以是char、short、int、unsigned型別。
2.命名的位域位寬不能為0,長度為0的位域不能指定名字,否則編譯出錯。
3.長度為0的位域的作用是使下乙個成員從下乙個儲存單位(大小與定義位域的型別有關)開始存放;
4.位域之外的其他記憶體的值並不受到改變;0位域並沒有使定義位域外的值賦為0。(gcc/vc6.0編譯的結果)
例如以下程式:
初始記憶體分布情況:從0x22ff68出開始,
記憶體變化情況如下:
結果為:
位結構體和位域
1.位域的定義 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並...
結構體之位域(位段)
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...
結構體之位域(位段)
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...