若結構體裡面包含多種資料型別,其如何在記憶體中分配儲存空間呢?
編譯器在處理結構體空間分配時,採取的是對齊方式,按照結構體中成員中成員型別位元組數最大的為標準,從上往下對結構體成員進行賦值,若當前成員的位元組數小於最大成員位元組數,接著為下乙個連續分配記憶體,若下乙個的記憶體分配後會大於最大成員位元組數,則為當前成員補齊至最大成員位元組數。
#includetypedef struct node
pnode;
int main(int argc, char const *argv)
這裡的位元組數計算:最大位元組數為c變數,8位元組,接著分配時:
a :1 sum=1<8
b: 4 sum=1+4<8
c : 8 sum=5+8>8 ,補齊3個位元組後再為c分配,sum=5+(3)+8=16
d: 8(指標根據最大位元組數來分配) sum=16+8=24
結果為24位元組。
改變下順序
#includetypedef struct node
pnode;
int main(int argc, char const *argv)
輸出位元組:1+(7)+8+4+(4)+8=32 C語言 結構體儲存空間分配
這兩天在看結構體,一直在琢磨結構體的儲存空間分配的問題,琢磨了半天總算明白了。和大家分享一下,希望能有所幫助。相信大家都知道結構體裡元素儲存要對齊吧,話雖是沒錯,只是這個 對齊 裡面包含了很多微妙的東西。首先詳細的給出結構體內存儲存空間分配的原則吧 編譯器按照成員列表順序乙個接乙個地給每個成員分配記...
C中結構體的儲存分配
對於c語言中結構體所佔的儲存空間的大小,也一直是筆試面試的常客,今天好好看了一下這方面,以前一直以為很清楚了,今天通過各種實際測試舉例,發現原來還是沒有搞透徹,好在現在是徹底懂了,所以和大家分享,希望能有所幫助。提到結構體,相信大家都知道 元素儲存要對齊 話是沒有錯,只是這個 對齊 裡面包含了很多微...
C中結構體的儲存分配
對於c語言中結構體所佔的儲存空間的大小,也一直是筆試面試的常客,今天好好看了一下這方面,以前一直以為很清楚了,今天通過各種實際測試舉例,發現原來還是沒有搞透徹,好在現在是徹底懂了,所以和大家分享,希望能有所幫助。提到結構體,相信大家都知道元素儲存要對齊,話是沒有錯,只是這個 對齊 裡面包含了很多微妙...