即使在i386上,是否也可能以某种方式捕获数据对齐错误?也许通过设置一个i386特定的机器寄存器或类似的东西。

在这种情况下,在Solaris Sparc上我会收到SIGBUS,但是在i386上,一切都很好。

环境:

  • 32位应用程序
  • Ubuntu Karmic的
  • gcc/g++ v4.4.1

  • 编辑:
    这就是为什么我问这个问题:
  • 我们的应用程序使用SIGBUS在Sol-Sparc上崩溃。为了进行调试,我将尝试在我们的i386平台上获得类似的行为。
  • 我们的Sol-sparc机器非常慢,因此在那里编译和调试要花费很多时间。而且我们的i386机器速度快得令人难以置信(8核,32G内存)。
  • 即使在i386平台上,也会因数据对齐错误而降低性能。因此,我想尽可能地修复数据对齐错误。
  • 最佳答案

    为了进一步了解Vokuhila-Oliba在“SOF Mis-aligned pointers on x86.”线程上的答案,似乎gcc可以生成内存访问未对齐的代码。 AFAIK您对此没有任何控制权。

    对gcc编译后的代码启用对齐检查将不是一个好主意。您可能会因获得良好的C代码而遇到SIGBUS错误。

    重新编辑:对不起

    关于c++ - 如何在x86上捕获数据对齐错误(在Sparc上又称为SIGBUS),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1929588/

    10-16 22:47