我注意到了一些非常奇怪的事情。说我定义了以下结构
typedef struct
{
uint32_t a;
uint16_t b;
uint32_t c;
} foo;
这个结构包含在我从网络收到的一个大缓冲区中。
以下代码适用于 x86,但我SIGBUS
在 ARM 上收到。
extern void * buffer;
foo my_foo;
my_foo = (( foo * ) buffer)[0];
用 memcpy 替换指针取消引用解决了这个问题。
在 ARM 中搜索 SIGBUS 让我发现这与内存对齐方式有关。
有人可以解释发生了什么吗?