首先需要明白,64位系統,不同變數占有的空間為
char :1
個位元組char*(
即指標變數
): 8
個位元組(
32位系統為
4位元組)
short int : 2個位元組
int:
4個位元組
unsigned int : 4
個位元組float: 4
個位元組double:
8個位元組
long: 8
個位元組(
32位系統下為
4位元組,大小和
int一樣)
long long: 8個位元組
unsigned long: 8
個位元組(
32位系統下為
4個位元組)
然後需要明白,
64位系統在記憶體管理方面遵循
8位元組對齊(
32位系統為
4位元組對齊),原則:在8
位元組對齊的情況下,按
8個位元組為單位分配儲存空間,如果不足,會自動補充,本次分配不足以存放下面的變數時,會重新分配空間。
比如struct a{
unsigned int a;
char b[2];
double c;
short d;
比如要計算sizeof(a),如何計算呢
首先unsigned int a為4個位元組,還剩4個位元組分配給char b[2],無論是在類還是結構體中,陣列型別都占有陣列中變數占有空間乘以個數,這裡的char b[2]占有2個位元組,還剩2個位元組
double c占有8個位元組,額外需要申請8個位元組,占有6個,剩下兩個位元組
這兩個位元組剛好給d
總共占用24個位元組
如何計算C 中結構體的儲存空間
include stdafx.h include struct a test a struct b test b struct c test c struct d test d int main 輸出的結果為24 16 6 32 對於這樣的乙個結果感到一些困惑,在網上查了相關的資料之後發現,原來是這...
C基礎 struct結構體所佔空間計算方法
怎麼計算struct結構所佔空間?以前看過又不太記得,記個筆記,省的每次都要去找 整體空間是占用空間最大的成員 的型別 所佔位元組數的整數倍。資料對齊原則 記憶體按結構體成員的先後順序排列,當排到該成員時,其前面已擺放的空間大小必須是該成員型別大小的整數倍,如果不夠則補齊,依次向後類推。32位系統下...
C 筆記(6) 結構體
結構體是c語言中的一種由基本資料型別構成的 並用乙個識別符號來命名的各種變數的組合。比如定義乙個node的結構體 struct node 這樣就定義了乙個結構體型別,它裡面包含乙個字串和乙個整型變數。用這個結構體來定義變數s1和s2 struct node s1,s2 s1和s2就都是struct ...