结构体字节对齐计算器
更新时间:2026-08-24
逐个添加结构体字段,自动按 C 对齐规则推算每个成员的
offsetof、结构体sizeof与填充字节(padding)。理解#pragma pack、精简结构体、对照offsetof宏的高频工具。纯前端运行,数据不上传。
功能
- 字段建模:添加任意字段,选内建类型(char/short/int/long/long long/float/double/pointer)或自定义大小。
- 自动推算:按"成员偏移是自身对齐数的整数倍 + 结构体总大小取最大成员对齐的整数倍"计算 offset / sizeof / padding。
- 区间展示:每个字段显示
[offset, offset+size-1]区间,红色标出填充字节。 - 可调对齐数:修改编译器默认对齐数(如
#pragma pack(1)、pack(2))观察影响。 - 预置示例:常用结构体一键填入。
为什么关心对齐
| 原因 | 说明 |
|---|---|
| cache line 跨越 | 成员若跨 cache line,读取会多访存一次 |
| 伪共享 | 两个高频字段落在同一 cache line 且被不同核写 → 反复失效 |
| 协议结构 | 网络报文 / 磁盘格式要求紧凑布局,用 #pragma pack 去掉 padding |
| sizeof 差异 | 不同平台(32/64 位、pack 与否)同一结构体大小可能不同 |
与 offsetof 宏对照
c
#include <stddef.h>
struct S { char a; int b; double c; }; // 在本工具里试算
printf("%zu %zu %zu\n", offsetof(struct S, a), offsetof(struct S, b), offsetof(struct S, c));配套阅读
- 内存对齐 —— 对齐规则与 cache line 的深层原因
- 伪共享与缓存一致性 —— 多个核写同一 cache line 的代价
- cache-friendly 代码 —— 如何组织数据避免跨行/伪共享