結構體內存對齊問題

2021-08-02 06:28:00 字數 672 閱讀 9493

問題描述:

結構體內存對齊問題值直接的體現就是計算結構體的sizeof占用的位元組數。

結構體內存對齊的幾個原則,有了這幾個原則,不管結構體裡面是什麼元素,我們都能夠正確算出sizeof值(以vs2013為例)

原則2:

在原則1的基礎上,檢查計算出的儲存單元是否為所有元素中最寬的元素的長度的整數倍,是,則結束;若不是,則補齊為它的整數倍。

原則3:

對於乙個結構體中包含另外乙個結構體成員,下面例子會講解,例如結構體s1作為結構體s2的乙個資料成員,在計算時結構體s1的資料會作為乙個整體去對齊。

以如下**為例:

#include 

struct s1

;struct s2

;int main()

執行結果:

24 48

下面根據上面的3個原則,可以繪製出下面兩個佔位圖,其中1表示占用記憶體,0表示空閒。

結構體s1的示意圖如下:

結構體s2的示意圖如下:

結構體內存對齊問題

今天參加的c c 筆試,總的來說,感覺已經比以前好多了,相信是每天及時總結的緣故,廢話不多說,下面繼續堅持。今天大致做了三塊內容,首先計算機網路通訊,然後是資料結構部分,最後才是c c 的題目。前兩者另外再做小結,先就c c 1 記憶體對齊問題 對這個問題,以前我也總結過,一段時間沒有回看盡然有點忘...

結構體內存對齊問題

假設cpu要讀取乙個4位元組大小的資料到暫存器中 假設記憶體讀取粒度是4 分兩種情況討論 1.資料從0位元組開始 記憶體對齊 2.資料從1位元組開始 記憶體不對齊 當資料從1位元組開始的時候,問題很複雜,首先先將前4個位元組讀到暫存器,並再次讀在這裡插入 片了這麼多額外操作,大大降低了cpu 的效能...

結構體內存對齊

結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...