sizeof計算結構體大小的時候具體是怎樣計算的
記憶體對齊的原則是根據最寬資料型別的大小進行對齊的
struct a
;大小是8個位元組
要進行記憶體對齊,是根據int -> 4個位元組對齊的
|char|---|short | 4位元組
|------int------| 4位元組
如上是這樣對齊的
struct a
;大小是8個位元組
|------int------| 4位元組
|char|---|short | 4位元組
struct a
;大小是12個位元組
|char|---|short | 4位元組
| short | ------|4位元組
|------int------| 4位元組
struct a
;大小為48個位元組
來乙個究極長的
|char|---|short |---------| 8位元組
| double | 8位元組
|char|---------| int | 8位元組
| int |char|---------| 8位元組
| short |------| int | 8位元組
| short |char|----| short |-----| 8位元組
typedef struct a
a;typedef struct b
b;結構體b的大小為16
以結構體中最長的int資料型別的大小進行記憶體對齊
typedef struct a
a;大小為8位元組
這個結構體中包含靜態資料成員,而靜態資料成員的存放位置與結構體例項的儲存位址無關(注意只有在c++中結構體中才能含有靜態資料成員,而c中結構體中是不允許含有靜態資料成員的)。其在記憶體中儲存方式如下:
|--------int--------| 4位元組
|--short-|----|---- | 4位元組
struct a
;
乙個空結構體中,在c中大小為0,
c++中大小為1
參考
C語言結構struct的記憶體對齊
作業系統的記憶體對齊問題對於低層程式設計來說非常重要,對理解記憶體對齊原理及方法則有助於幫助程式設計師判斷訪問非法記憶體。struct記憶體預設的記憶體對齊原則主要有兩個,乙個是結構成員之間的記憶體對齊,另乙個是結構體整體的記憶體對齊。c編譯器預設的結構成員變數記憶體對齊為 n位元組對齊 n即該成員...
C語言中的記憶體對齊
這階段一直想寫一篇部落格,其實有好多東西,先寫一下c語言中的記憶體對齊吧。大家都知道,在c語言中定義乙個變數,char是占用乙個位元組的,int占用四個位元組,float占用四個位元組,double占用八個位元組,short占用兩個位元組,long int占用四個位元組,long long神馬的是6...
C語言中記憶體對齊問題
在日常的開發工作中,時常要用到結構體的定義工作,但是結構體中資料的定義順序是否合理直接影響了結構體所佔記憶體的大小,所以了解c語言中記憶體對齊的知識十分有必要。關於記憶體對齊的原則,我們首先討論沒有定義巨集 pragam pack 的情況,在該巨集沒有定義的情況之下,c語言中結構體的記憶體對齊問題主...