问题描述
即使在i386上,是否也可能以某种方式捕获数据对齐错误?
Is it somehow possible to catch data-alignment faults even on i386? Maybe by setting a i386 specific machine register or something like that.
在Solaris Sparc上,在这种情况下,我会收到SIGBUS,但是在i386上,一切都很好。
On Solaris-Sparc I am receiving a SIGBUS in this case, but on i386 everything is fine.
环境:
- 32位应用程序
- Ubuntu Karmic
- gcc / g ++ v4.4.1
编辑:
这就是为什么我问这个问题:
EDIT:Here is why I am asking this:
- 我们的应用程序在SIGBUS上的Sol-Sparc崩溃了。出于调试的目的,我会尝试在我们的i386平台上获得类似的行为。
- 我们的Sol-sparc机器非常慢,因此在那里编译和调试要花很多时间。而且我们的i386机器的速度快得令人难以置信(8核,32G内存)。
- 即使在i386平台上,在数据对齐错误方面也要付出一定的性能代价。因此,我想尽可能地修复数据对齐错误。
推荐答案
Vokuhila-Oliba的答案是 线程看来gcc可以生成未对齐的内存访问代码。 AFAIK,您对此无能为力。
To expand on Vokuhila-Oliba's answer looking at the "SOF Mis-aligned pointers on x86." thread it seems that gcc can generate code with mis-aligned memory access. AFAIK you don't have any control over this.
对gcc编译后的代码启用对齐检查将是个坏主意。您可能会因为 good C代码而遇到SIGBUS错误。
Enabling alignment checks on gcc compiled code would be a bad idea. You risk getting SIGBUS errors for good C code.
重新编辑:抱歉
这篇关于如何在x86上捕获数据对齐错误(在Sparc上又称为SIGBUS)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!