本当に奇妙なことに気づきました。次の構造が定義されているとします
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 について検索すると、これがメモリ アラインメントに関連していることがわかりました。
誰かが何が起こっているのか説明できますか?