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

32位系统下结构占用21字节疑问:3指针+2数值为何不是20字节?

32位系统下该结构占用21字节的原因

你按5*4=20计算是基于普通C结构体4字节对齐的思路,但这里的结构是Redis的压缩列表(ziplist),它的内存占用逻辑和普通结构体完全不同:

  • ziplist是专为节省内存设计的紧凑数据结构,不遵循固定字节对齐规则,而是根据元素实际内容动态编码存储。
  • 完整ziplist的组成部分:
    • zlbytes:4字节,记录整个压缩列表的总字节数
    • zltail:4字节,记录最后一个元素到列表起始位置的偏移量
    • zllen:2字节,记录列表内的元素个数
    • 元素条目:每个元素的存储长度按需编码,比如小整数仅需1字节存储,而非固定4字节
    • zlend:1字节,标记压缩列表结束,固定为0xFF

以你的场景为例,若2个数值是小整数(各占1字节),3个元素的编码总长度为6字节,再加上各固定部分和结束标记,总长度就是4+4+2+6+1=21字节。

普通结构体的对齐规则不适用于ziplist,它通过动态编码和紧凑存储实现内存最小化,因此实际占用字节数会和固定成员大小的计算结果存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:55:28