gpu*_*guy 15 c pointers alignment
据我所知,在以下行中,我们尝试写入无效的内存位置.但这实际上也是一个未对齐的指针.有人可以解释什么是未对齐的指针,以及下面的未对齐指针是什么?
*(int*)0xffffffff = 0xbad;
Run Code Online (Sandbox Code Playgroud)
tem*_*def 16
许多架构都有一个称为对齐的概念,其中硬件被设计为在字大小的倍数的地址上操作.例如,在32位处理器上,对象可能与32位边界(4个字节)对齐,而在64位处理器上,对象可能与64位边界(8个字节)对齐.对齐指针是指向字大小的倍数的地址的指针,而未对齐指针是指向不是字大小的倍数的地址的指针.
在大多数体系结构中,读取或写入未对齐的指针会受到某种惩罚.在某些处理器上,这样做会导致总线错误,这通常会立即终止程序.在其他方面,例如x86,未对齐的读取和写入是合法的,但由于硬件的结构方式而受到性能损失.
在你的代码中,0xFFFFFFFF= 2 32 - 1可能没有对齐,因为它不是最常见的字大小的倍数(它不能被2的任何幂除尽).
希望这可以帮助!