【问题标题】:What is a misaligned pointer?什么是错位指针?
【发布时间】:2013-12-09 14:09:47
【问题描述】:

我了解到,在以下行中,我们正在尝试写入无效的内存位置。但这实际上也是一个未对齐的指针。谁能解释一下什么是未对齐的指针,以及下面的未对齐指针是怎样的?

*(int*)0xffffffff = 0xbad;

【问题讨论】:

  • 某些体系结构中的指针必须落在某些边界上,例如,32位字边界,因此在这种情况下,指针的低2位需要为零.

标签: c pointers alignment


【解决方案1】:

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

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

在您的代码中,0xFFFFFFFF = 232 - 1 可能未对齐,因为它不是最常见字长的倍数(它不能被 2 以外的任何 2 的幂整除0)。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 2011-05-19
    • 1970-01-01
    • 2013-03-07
    • 2023-04-02
    • 2013-05-05
    • 2011-01-19
    • 2012-03-07
    相关资源
    最近更新 更多