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;
}

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

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

相关推荐
姚青&1 天前
Bug基本概念
bug
AI多Agent协作实战派1 天前
AI多Agent协作系统实战(三十九):AI修对了Bug,却越了权——自动化团队的第一条铁律
人工智能·自动化·bug
深念Y3 天前
AMD 芯片组驱动触发高频 SSD 写入的问题及解决方案
windows·bug·ssd·日志·芯片·驱动·amd
加油码3 天前
探秘 volatile关键字:编译器的过度优化
linux·bug·信号处理
鹿屿二向箔3 天前
keil5.39版本使用AC6编译器不能位域操作的BUG使用STM32U385系列MCU
stm32·单片机·bug
angryshan4 天前
goLang配置断点流程
go·bug
吨吨ai5 天前
# ChatGPT Plus / Pro + Codex Debug 实战:如何让 AI 从日志、Trace、异常堆栈自动定位线上 Bug
人工智能·chatgpt·bug
灰暗世界%6 天前
飞牛bug修复
bug
凌云拓界8 天前
NodeVerdict | 性能门禁:把追踪数据变成 CI 规则
ci/cd·信息可视化·开源·node.js·bug·数据可视化·安全架构
qingmiaozhuan9 天前
软件测试Bug复现高清录屏标准流程:新手入门与规范指南(2026实战版)
bug·电脑录屏·电脑录屏软件·测试录屏规范·音画同步录制