2011-04-05 57 views
0
struct X { 
char a; 
char b; 
int c; 
}; 

在上述結構中,成員b存儲在一個奇數地址中。我在linux/x86環境中檢查了這個問題字節對齊到奇數地址。它違反訪問邊界理論嗎?

許多網頁都談到了處理器無法訪問奇數地址。如果它是真的,那麼應該在成員ab之間填充1個字節,使得b存儲在偶數地址中。

我錯過了什麼?

回答

1

在一個奇怪的地址訪問一個字符總是可以的。但是,奇數地址處的int可能會導致問題。但是,如果需要,編譯器會自動將填充添加到結構字段之間。我假設C/C++爲您的語言。

+0

但許多文檔稱內存訪問是根據處理器的字大小完成的。請參閱http://en.wikipedia.org/wiki/Data_structure_alignment。它說:「當計算機的字大小是4個字節(一個字節意思是8位)時,要讀取的數據應該是一個4的倍數的存儲器偏移量。」那麼這裏有什麼? – George 2011-04-05 08:29:24