爲了訪問未對齊的內存,處理器須要作兩次內存訪問。而對齊的內存只需作一次內存訪問。 一個字或雙字操做數跨越了4 字節邊界,或者一個四字操做數跨越了8 字節邊界,被認爲是未對齊的,從而須要兩次總線週期來訪問內存。一個字起始地址是奇數但卻沒有跨越字邊界被認爲是對齊的,可以在一個總線週期中被訪問。某些操做雙四字的指令須要內存操做數在天然邊界上對齊。若是操做數沒有對齊,這些指令將會產生一個通用保護異常。雙四字的天然邊界是 可以被16 整除的地址。其餘的操做雙四字的指令容許未對齊的訪問(不會產生通用保護異常),然而,須要額外的內存總線週期來訪問內存中未對齊的數據。php
缺省狀況下,編譯器默認將結構、棧中的成員數據進行內存對齊。css
#pragma pack 的用法: #pragma pack(push) //保存當前對齊方式到packing stack #pragma pack(push,n) 等效於 #pragma pack(push) #pragma pack(n) //n=1,2,4,8,16 保存當前對齊方式,設置按n 字節對齊。 #pragma pack(pop) //packing stack 出棧,並將對其方式設置爲出棧的對齊。