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

为何地址0xffffcff3对应0x25而非0xffffcff0?小端序疑惑

小端序下栈存储的误区解析

首先明确核心点:小端序只影响多字节数据的字节存储顺序,不影响单个字节的寻址——这部分你的理解是对的,每个地址对应唯一的字节,地址从低到高(0xffffcff0 → 0xffffcff3)就是字节在内存中的物理排列顺序。

你的问题出在对「多字节数据的存储逻辑」理解反了:

  • 小端序的规则是:多字节数值的低字节,存在内存的低地址;数值的高字节,存在内存的高地址。
  • 举个具体例子:假设栈上有一个32位双字数值0x25ABCDEF,它的字节拆分是:
    • 数值的最低字节:0xEF
    • 次低字节:0xCD
    • 次高字节:0xAB
    • 最高字节:0x25
  • 按照小端序存储到栈中时,地址分配是:
    • 0xffffcff0 → 0xEF(数值低字节存低地址)
    • 0xffffcff1 → 0xCD
    • 0xffffcff2 → 0xAB
    • 0xffffcff3 → 0x25(数值高字节存高地址)

这就是你在GDB里看到0xffffcff3对应0x25的原因——这个0x25是对应双字数值的最高字节,按照小端序规则就该放在最高的那个地址上。

而你之前误以为「数值的第一个字节(高位)该放在低地址」,这是大端序的规则,和x86的小端序正好相反。

另外补充:当CPU读取这个双字时,会自动把低地址的字节当作数值的低字节,高地址的字节当作数值的高字节,拼接成正确的数值(0x25ABCDEF),不需要手动翻转——翻转是存储时的逻辑,读取时CPU已经帮你处理好了。

内容的提问来源于stack exchange,提问作者Two Minute Code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:31:09