這裏是一個C結構的聲明:爲什麼短爲2字節對齊?
struct align
{
char c; //1 byte
short s;//2 bytes
};
在我的環境中,的sizeof(結構對準)是4和填充1個字節是「字符c」和「短S」之間。有人說這是因爲'short'必須是2字節對齊的,所以在'char c'後面寫入1個字節。在32位機器上,我知道'int'最好是4字節對齊,以防止2個存儲器讀取週期,因爲在CPU和存儲器之間的地址總線上發送的地址是4的倍數。但'short'是2個字節,超過4個字節,所以它的地址可能是4個字節單位內的任何字節(除了最後一個字節)。
4的地址的倍數 - > | 0 | 1 | 2 | 3 |我的意思是,'short'可以從0,1或2開始。所有可以通過1個讀週期檢索,不必是0或2.在我的'結構對齊'情況下,'char c'可以爲0,'short s'可以爲1-2,填充可以爲3.
爲什麼2字節長的「short」必須是2字節對齊的?
感謝
更新我的環境: gcc版本4.4.7,i686的,英特爾
你使用什麼編譯器和平臺?你已經設置了哪些編譯器選項? – Dai
這取決於你的編譯器和系統架構。你應該在系統中包含這些細節。在某些系統中,「short」必須有2字節對齊。 –
在許多機器上,當數量爲N字節對齊時,訪問N字節數量(至少對於{1,2,4,8,16}中的N)效率最高。生活就是這樣;習慣它,因爲我懷疑芯片製造商是否會改變它,只是因爲你認爲它不是它應該的樣子。 –