You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言int类型数据内存存储规则与GDB调试异常问题咨询

现象原因

这个问题是x86架构默认采用小端字节序,叠加GDB默认按4字节长度读取内存的规则共同导致的:

  • 小端字节序的核心规则是:多字节整数的低位字节存储在低内存地址,高位字节存储在高内存地址
  • 你的int类型变量a的值为4,4字节的完整十六进制表示为0x00000004,按照小端序存储在0x7fffffffde6c ~ 0x7fffffffde6f这4个连续地址的布局如下:
    • 最低地址0x7fffffffde6c存最低位字节0x04
    • 地址0x7fffffffde6d存字节0x00
    • 地址0x7fffffffde6e存字节0x00
    • 最高地址0x7fffffffde6f存最高位字节0x00
  • 你在GDB中直接输入地址打印值时,GDB默认会从目标地址开始连续读取4个字节(DWORD长度),再按小端序解析为整数,就会得到你看到的结果:
    • 读取0x7fffffffde6b时,实际读取的是0x7fffffffde6b ~ 0x7fffffffde6e的4个字节,对应值为0x00 0x04 0x00 0x00,按小端序解析得到0x00000400
    • 读取0x7fffffffde6a时,实际读取的是0x7fffffffde6a ~ 0x7fffffffde6d的4个字节,对应值为0x00 0x00 0x04 0x00,按小端序解析得到0x00040000
    • 读取0x7fffffffde69时,实际读取的是0x7fffffffde69 ~ 0x7fffffffde6c的4个字节,对应值为0x00 0x00 0x00 0x04,按小端序解析得到0x04000000
  • 如果需要单独查看单个字节的内容,可以使用GDB命令x /bx 目标地址,就能得到你预期的0x0结果。

内容的提问来源于stack exchange,提问作者Do Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:36:01