為什麼要位元組對齊

2021-08-17 06:34:08 字數 756 閱讀 9833

2.硬體原因:經過記憶體對齊之後,cpu的記憶體訪問速度大大提公升(因為任意資料或者結構體都是從偏移量為0的地方開始儲存的,經過位元組對齊後,他們的大小都是2的整數倍,正好符合cpu按塊讀取資料的規則,這樣的話,cpu每次都是讀取乙個或者若干個塊,不需要再刪除裡面不需要的資料了,從而提高了讀的速度)。具體原因接下來解釋

圖一:我們普通程式設計師心中的記憶體印象,由乙個個位元組組成,但是cpu卻不是這麼看待的

圖二:

cpu把記憶體當成是一塊一塊的,塊的大小可以是2,4,8,16 個位元組,因此cpu在讀取記憶體的時候是一塊一塊進行讀取的,塊的大小稱為(memory granularity)記憶體讀取粒度。

我們再來看看為什麼記憶體不對齊會影響讀取速度?

假設cpu要讀取乙個4位元組大小的資料到暫存器中(假設記憶體讀取粒度是4),分兩種情況討論:

1.資料從0位元組開始

2.資料從1位元組開始

解析:當資料從0位元組開始的時候,直接將0-3四個位元組完全讀取到暫存器,結算完成了。

當資料從1位元組開始的時候,問題很複雜,首先先將前4個位元組讀到暫存器,並再次讀取4-7位元組的資料進暫存器,接著把0位元組,4,6,7位元組的資料剔除,最後合併1,2,3,4位元組的資料進暫存器,對乙個記憶體未對齊的暫存器進行了這麼多額外操作,大大降低了cpu的效能。

但是這還屬於樂觀情況,上文提到記憶體對齊的作用之一是平台的移植原因,因為只有部分cpu肯幹,其他部分cpu遇到未對齊邊界就直接罷工了。

為什麼要位元組對齊

結構體中資料成員對齊規則 結構體 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員的大小或該成員的子成員大小 只要該成員有子成員 的整數倍開始 結構體作為成員 如果乙個結構體裡有某些結構體成員,則結構體成員要從內部最大元...

什麼是位元組對齊,為什麼要位元組對齊。

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

什麼是位元組對齊,為什麼要對齊

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