什么是错位指针?

据我所知,在以下行中,我们尝试写入无效的内存位置。 但这实际上也是一个未对齐的指针。 有人可以解释什么是未对齐的指针,以及下面的未对齐指针是什么?

*(int*)0xffffffff = 0xbad; 

许多架构都有一个称为对齐的概念,其中硬件被设计为在字大小的倍数的地址上操作。 例如,在32位处理器上,对象可能与32位边界(4个字节)对齐,而在64位处理器上,对象可能与64位边界(8个字节)对齐。 对齐指针是指向字大小的倍数的地址的指针,未对齐指针是指向不是字大小的倍数的地址的指针。

在大多数体系结构中,读取或写入未对齐的指针会受到某种惩罚。 在某些处理器上,这样做会导致总线错误,通常会立即终止程序。 在其他方面,例如x86,未对齐的读取和写入是合法的,但由于硬件的结构方式而受到性能损失。

在你的代码中, 0xFFFFFFFF = 2 0xFFFFFFFF可能没有对齐,因为它不是最常见的字大小的倍数(它不能被2的任何幂整除)。

希望这可以帮助!