作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道在下一行中我们试图写入一个无效的内存位置。但这实际上也是一个未对齐的指针。有人可以解释什么是未对齐的指针以及以下未对齐的指针吗?
*(int*)0xffffffff = 0xbad;
最佳答案
许多体系结构都有一个称为对齐 的概念,其中硬件设计为在字长的倍数的地址上运行。例如,在 32 位处理器上,对象可能与 32 位边界(4 字节)对齐,而在 64 位处理器上,对象可能与 64 位边界(8 字节)对齐。对齐指针指向的地址是字长的倍数,未对齐指针指的是不指向字长倍数的地址。
在大多数架构中,读取或写入未对齐的指针会受到某种惩罚。在某些处理器上,这样做会导致总线错误,这通常会立即终止程序。在 x86 等其他平台上,未对齐的读取和写入是合法的,但由于硬件的结构而导致性能下降。
在您的代码中,0xFFFFFFFF
= 232 - 1 可能未对齐,因为它不是最常见字长的倍数(它不能被任何次幂整除)除了 20 之外的两个。
希望这对您有所帮助!
关于c - 什么是未对齐的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183094/
我是一名优秀的程序员,十分优秀!