c++ - 引用静态对象 - 在 ARM proc 上触发对齐陷阱

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

Alignment trap: not handling instruction e28fc609 at [<0001b588>]

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

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

有没有人对我可能哪里出错或在哪里查找有任何建议?

最佳答案

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

关于c++ - 引用静态对象 - 在 ARM proc 上触发对齐陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390260/

相关文章:

c++ - 如何解码caffemodel中的权重并转发图像?

c++ - 基于 Flex/Bison 的编译器——二进制生成

c++ - 限制对特定类的方法调用

c - 将加密加速单元与 uclinux 和外部库结合使用

assembly - ARM 组装难题

c++ - 分配初始化、对齐的内存

c++ - Boost.Python - 将 boost::python::object 作为参数传递给 python 函数?

c - ARM (裸机): call binary file as function

c - 整数类型的对齐

c - 为什么 C 中的 double 是 8 字节对齐的?