我有一堂课:
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
如果我将指针转换为未对齐的值,我可以看到会发生这种情况,但我只是引用一个静态对象。有人会假设访问会正确对齐。
请注意,该类被大大简化了。它包含很多成员变量和方法(不是我的设计!)。
有人对我可能出错的地方或去哪里有任何建议吗?