8字节内存对齐引发的bug

记录一个偶发的死机情况

1. 问题背景

最近的项目中,改动代码时新增了一个结构体,该结构体包含 double 成员,并通过 double 指针进行了取值操作。

2. 代码复现

大致代码如下:

c 复制代码
/* packed(1)结构体:double成员仅按1字节对齐,value偏移为1,必然不是8字节对齐 */
#pragma pack(1)             // 设置对齐值为 1 字节
typedef struct {
    uint8_t  prefix;   /* 偏移0 */
    double   value;    /* 偏移1,未8字节对齐 */
} unaligned_double_struct_t;
#pragma pack()              // 恢复默认对齐


void Trigger_Unaligned_Double_Fault(double *p)
{
    volatile double val;
    

    
    /* 对double指针进行取值操作,若地址未8字节对齐则触发异常 */
    val = *p;
    
    /* 防止编译器优化 */
    (void)val;
}

执行后触发了异常,关键在于该操作并非每次都会执行,因此并非每次必现。

手动模拟异常操作的结果:

相关推荐
猫咪很可爱9 小时前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
李永奉15 小时前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦DNS通话算法后,大概率通话时蓝牙自动断连,RAM空间爆了问题处理
单片机·嵌入式硬件·mcu·物联网·电脑·bug
8年车载测试3 天前
车载测试中如何通过 Jira 平台提交 Bug:操作步骤与关键要点
bug·jira·uds诊断·hil测试·uds自动化测试·ecu刷写测试·canoe工具
硅基手札4 天前
SPI技术系列 13 · SPI 调试与排查
linux·运维·stm32·单片机·嵌入式硬件·bug
李永奉4 天前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦通话语音算法后,设置触摸音在唤醒语音助手和通话时触摸音没作用问题
单片机·嵌入式硬件·mcu·物联网·电脑·bug
kyle~6 天前
机器人通信 --- FANUC TCP 并发请求-响应错位 Bug 复盘
tcp/ip·机器人·bug
鬼手点金8 天前
Harness 工程:模型之外的竞争力
服务器·人工智能·深度学习·机器学习·bug
巴巴媛6668 天前
【Debug1】程序死机,while(1)循环,怎么办?
c语言·笔记·stm32·嵌入式硬件·bug
JosieBook10 天前
【多线程】两台机器同时抢一个字典:一次并发 Bug 的排查
java·网络·bug
鬼手点金11 天前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw