引用ARM proc上触发的静态对象 - 对齐陷阱

时间:2011-03-22 11:10:54

标签: c++ arm memory-alignment

我有一个班级:

class A {
public:
    static A& instance();

    ...
    void setValue(int val){ _value = val; }
private:
    int _value;
}
A& A::instance(){
  static A _Instance;
  return _Instance;
}

我在ARM处理器上运行它。我遇到的问题是,当我从特定类(比如B类)调用instance()方法时,应用程序正在触发内核中的对齐陷阱。如果我从其他任何地方调用instance(),我都不会遇到对齐陷阱。

  

对齐陷阱:未在[< 0001b588>]处理指令e28fc609

我可以看到如果我将指针指向错误对齐的值,会发生这种情况,但我只是引用一个静态对象。人们会认为访问将正确对齐。

请注意,课程大大简化了。它包含 lot 的成员变量和方法(不是我的设计!)。

有没有人对我可能出错的地方或在哪里看?

1 个答案:

答案 0 :(得分:0)

感谢投票人员。事实证明,这个问题的根本原因是分段错误。反汇编表明,对齐陷阱指向故障信号处理程序子程序。我正在调查为什么会发生这种情况,但我最初提出的问题已经不再适用了。