【发布时间】: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