我读过像指针必须是字节对齐的东西。 我对典型的32位架构的理解......所有指针都是字节对齐的......不是吗?
请确认。
可以有一个非字节对齐的指针吗?
基本上,这在tx描述符存储器的硬件参考手册中有所提及。
答案 0 :(得分:9)
是的,您无法处理小于一个字节的任何内存量。
答案 1 :(得分: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意义
答案 2 :(得分:1)
如果指针或数字不是字节对齐的,它将从一个字节的中间开始。即一个字节的某些位属于一个指针,而其他位属于另一个指针。这很奇怪,在实践中不会发生。