結構體的大小計算

2021-09-23 17:21:04 字數 1166 閱讀 9161

結構體是c語言的一種資料型別,是一種多種基本資料型別混合的型別。既然他是資料型別,那麼就有資料型別在記憶體中所佔位元組數,即大小。如何計算資料型別的大小呢?是簡單的將乙個個簡單資料型別的大小相加嗎?還是有自己特殊的儲存方式?

我們這裡先通過舉多個例子來看看實際執行的結果,然後再討論規律。

struct stu //例子1

stu;//8位元組

struct stu//例子2

stu;//12位元組

struct stu//例子3

stu;//4位元組

struct stu//例子4

stu;//6位元組

struct stu//例子5

stu;//12位元組

struct stu//例子6

stu;//24位元組

struct stu//例子7

stu;//24位元組

struct stu//例子8

stu;//16位元組

struct stu//例子9

stu;//16位元組

struct stu//例子10

stu;//16位元組

每個例子的結果你都知道為什麼了嗎?如果還沒有猜出來原因,那我們在這裡進行詳細講解。

可能很多書上都有會對結構體的大小有詳細的概念,但是概念總歸是概念,我在這裡主要是幫助你們理解和計算,不是將概念原封不動的給你們。

我自己對結構體大小的判斷是通過這個方法:先看結構體中最大的元素有多大,如果最大的是double,則最大為8位元組,如果是int,則最大為4位元組。這樣先拿到乙個最大的對齊數。然後我們開始看結構體的大小,從第乙個元素開始,先確定第乙個元素的大小,如果第乙個元素所佔位元組數小於最大對齊數,那我們用最大對齊數減去第乙個元素所佔位元組數,然後用這個剩餘空間的位元組數和第二個元素所長位元組數進行對比,如果第二個元素可以放進剩餘的空間中,那就將第二個元素放進剩餘空間中,以此類推,直到接下來的乙個元素不能放進剩餘空間中,那就為這個元素重新開闢一塊最大對齊數的空間,繼續上面的過程,這樣最終開闢了幾個最大對齊數的空間,就是這個結構體的大小。

以上的方法在vs和linux環境下均可以實現,看了這篇部落格後,希望你可以在你自己的平台上試一下,掌握結構體大小的計算。

結構體大小計算

c語言 結構體大小計算 個人標籤啥東東封尾機 參考 一 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 eg typedef struct stu4 stu4 typedef struct stu5 stu4 這兩個結構體大小都為8 已驗證 二 結構體大小必須是所有成員大小...

結構體大小計算

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...

結構體大小計算

結構體成員偏移量必須是成員大小的整數倍 結構體的大小必須是成員大小的整數倍 陣列,結構體除外 雖然浪費空間,但按照計算機的訪問規則,這種對齊方式,提高了效率 struct s1 int b 4float c 4double d 8 c pragma pack 4 指定向4對齊,而不是8 struct...