C基礎 struct結構體所佔空間計算方法

2021-09-21 14:28:19 字數 988 閱讀 8024

怎麼計算struct結構所佔空間?

以前看過又不太記得,記個筆記,省的每次都要去找

整體空間是占用空間最大的成員(的型別)所佔位元組數的整數倍。

資料對齊原則—記憶體按結構體成員的先後順序排列,當排到該成員時,其前面已擺放的空間大小必須是該成員型別大小的整數倍,如果不夠則補齊,依次向後類推。

32位系統下,(64位系統下long位元組數不一樣)

struct  a

;

首先是struct a 的空間

型別位元組

位址範圍

char a

1[0,1)

double b

8[8,16) (原則2)

int c

4[16,20)

char d

1[20,21)

總大小24(原則1)

struct  a_opt

;

sizeof(struct a_opt)=1+1+2(原則2)+4+8=16

struct  a

; struct b

;

然後是struct b 的空間

型別位元組

位址範圍

char a

1[0,1)

struct a b

24[8,32) (原則2)

int c

4[32,36)

總大小40(原則1,以struct a中的double為基礎)

__packed是位元組對齊的意思。比如說int float double char它的總大小是4 + 4 + 8 + 1 = 17;

如果不用__packed的話,系統將以預設的方式對齊(假設是4位元組),那麼它佔4 + 4 + 8 + 4 = 20(24原則一);(不足4位元組以4位元組補齊)。

typedef __packed struct

Go 空結構體struct 作用

package main import fmt unsafe func main 空結構體的例項和作用 func empstruct var s1 struct fmt.println 空結構體占用記憶體的情況 unsafe sizeof s fmt.printf 空結構體指標指向情況 s p,s1...

Golang空結構體struct 用途,你知道嗎

golang 空結構體 struct 可以用來節省記憶體 a struct println unsafe.sizeof a output 0 理由如下 本例說明在map裡節省資源的用途 set make map string struct for value range string fmt.pri...

C 結構體 struct 詳解

陣列 array 它是一組具有相同型別的資料的集合。但在實際的程式設計過程中,我們往往還需要一組型別不同的資料,例如對於學生資訊登記表,姓名為字串,學號為整數,年齡為整數,所在的學習小組為字元,成績為小數,因為資料型別不同,顯然不能用乙個陣列來存放。在c語言中,可以使用 結構體 struct 來存放...