乙個結構體占用記憶體大小的問題

2021-08-19 22:13:13 字數 1053 閱讀 6180

先來看下面的示例**:

struct demo

;int main()

毫無疑問,都會說,結果為 8

這時我提出乙個問題?請問在32位和64位pc機上分別是多少,或許有些人就有些迷茫了。

實際上都等於 8,這時候可能有些人更加疑惑了

實際上 int 型資料在32位/64位都只占用4位元組

下面我們再看乙個例子:

struct demo

;int main()

直接上結果:

我們會驚奇的發現 對於int型指標,32位佔4位元組,64位佔8位元組,希望大家可以謹記這一點。

那麼試問,如果將結構體裡的 int* a 改為 char* a,那麼結果優勢如何?

哈!結果居然執行一樣

是不是和大家想的不太一樣呢?

其實指標預設情況下是int型指標

接下來可能就是面實中經常遇到了問題,給你乙個結構體,那你計算出他占用的記憶體。(以下都是在32位機上所占用記憶體)

struct demo

;

初學程式設計的人會說等於5,1+4 = 5 那麼我們看看執行結果

很多人會表示驚訝,為什麼是8呢?

實際上這裡存在乙個記憶體對齊的原因。

具體關於記憶體對齊原則,會在接下來的部落格中提到。

C語言中結構體占用記憶體大小

這個問題很經典,很容易出現,也叫記憶體的4k對齊吧 cpu傳輸資料的方式 cpu每次傳輸資料大小由它的總線條數決定,32位傳輸4個位元組,64位傳輸8個位元組。這裡以64位系統舉例,若宣告乙個變數大小為8位元組,起始位址位1,而cpu讀取的位址為0 7,則該變數需要讀取兩次,顯然降低了cpu的效能。...

類的占用記憶體大小

1.類的大小為類的非靜態成員資料的型別大小之和,也 就是說靜態成員資料不作考慮。2.普通成員函式與sizeof無關。3.靜態成員並不屬於某個物件,sizeof取的是物件大小。4.虛函式由於要維護在虛函式表,所以要佔據乙個指標大小,也就是4位元組。5.空類的sizeof為1。因為乙個空類也要例項化,所...

C C 中結構體占用記憶體大小的計算方法

引言 結構體在c語言中雖然經常使用,但是怎麼計算乙個結構體占用多大的記憶體,很多c語言的新手都沒注意過,其實c語言的語法簡單,難就難在它更偏向於與底層,與記憶體打交道。對於嵌入式方面來說,對c語言的要求更高,因為有些硬體的記憶體並不像我們使用的電腦的記憶體那麼充裕,所以需要節約記憶體。結構體中同樣的...