本文介绍了如何在x86上捕获数据对齐错误(在Sparc上又称为SIGBUS)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即使在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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-31 00:38