【问题标题】:Referencing static object - alignment trap triggered on ARM proc引用静态对象 - 在 ARM proc 上触发对齐陷阱
【发布时间】:2011-03-22 11:10:54
【问题描述】:

我有一堂课:

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(),我不会遇到对齐陷阱。

对齐陷阱:未处理 [] 处的指令 e28fc609

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

请注意,该类被大大简化了。它包含 很多 成员变量和方法(不是我的设计!)。

有人对我可能出错的地方或去哪里有任何建议吗?

【问题讨论】:

  • @MM 您是否尝试过将A::instance() 设为非内联?
  • 试过在编译器中只运行这段代码吗?它是否以同样的方式失败?
  • @aix - 实际上在代码中,该方法不是内联实现的。我已经更新了上面的代码。干杯。
  • @daramarak - 是的,我试过了,它成功了。事实上,在代码中的很多地方都使用这种方法来检索引用。它只在一个特定的地方失败。
  • 你能找出是哪条 asm 指令(或者至少是哪条 C++ 语句)触发了异常吗?

标签: c++ arm memory-alignment


【解决方案1】:

感谢您的意见。事实证明,这个问题的根本原因是分段错误。反汇编表明对齐陷阱指向故障信号处理程序子程序。我正在研究为什么现在会发生这种情况,但我最初提出的问题已不再相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2016-12-12
    • 2015-11-28
    • 2023-03-07
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多