2010-06-15 97 views
2

我讀的東西像指針必須是字節對齊的。 我在一個典型的32位架構中的理解......所有的指針都是字節對齊的......不是?指針始終是字節對齊的

請確認。

可以有一個不是字節對齊的指針嗎?

基本上這是在tx描述符內存的硬件參考手冊中提到的。

+3

你的意思是字對齊嗎? – Sjoerd 2010-06-15 09:58:09

+0

沒有...我只是詢問字節對齊。我瞭解字對齊 – kumar 2010-06-15 10:15:38

+0

你確定它不是「N字節對齊」嗎? – 2010-06-15 10:33:06

回答

9

是的,你不能解決任何數量的小於一個字節的內存。

1

如果指針或數字不是字節對齊的,它將在一個字節的中間開始。即一個字節的某些位將屬於一個指針,而其他位則屬於另一個指針。這很奇怪,並且在實踐中不會發生。

+0

不會發生不能發生,因爲一個字節是最小的可尋址單位... – Spudd86 2010-06-15 17:53:30

5

在C中,指針指向一個對象和匕首;

唯一不是整數個字節的對象是位域。

C語言不允許您創建指向位字段的指針;這個代碼將導致一個編譯錯誤:「不能把位字段‘B’的地址」:

struct S { unsigned int a:4, b:4, c:4, d:3, e:1; }; 

int main (void) { 
    struct S s; 
    int *i = &s.b; // would point half a byte into s 
    return 0; 
} 

指針只能通過對象的指向的大小的整數遞增。

由於您不能創建一個指向大小小於一個字節的對象的指針,或者將指針增加一個小於一個字節,所以不能有小於一個字節對齊的指針。

†在C意義上,不是OO意義

+0

+1對於匕首和/對於筆記 – ShinTakezou 2010-06-15 13:39:50