2010-06-15 54 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