问题描述
是它在某种程度上可能赶上数据定位错误,甚至在i386?也许通过设置一个特定的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的业报
- GCC / G ++ v4.4.1
修改:
这是为什么我问的:
EDIT:Here is why I am asking this:
- 我们的溶胶 - 用的Sparc SIGBUS应用程序崩溃。为了调试的目的,我会尽力让我们的i386平台上的类似行为。
- 我们的溶胶 - SPARC机器很慢,所以编译和调试需要花费大量的时间。而我们的i386机器是令人难以置信的快(8核,32G内存)。
- 即使在i386平台上存在的数据对齐故障性能为代价。因此,我想解决数据定位错误尽可能。
推荐答案
要在Vokuhila-Oliba的回答扩大在看的跟帖似乎GCC可产生code。与未对齐的内存访问。 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编译code启用对齐检查将是一个坏主意。你的风险越来越SIGBUS错误的的好的C $ C $角
Enabling alignment checks on gcc compiled code would be a bad idea. You risk getting SIGBUS errors for good C code.
重新编辑:我们对此深感抱歉。
ReEdited: Sorry about that
这篇关于86:HOWTO捕获数据对齐故障(又名SIGBUS在SPARC)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!