如何通过更改其成员的顺序来查找可以缩小的所有结构

Gor*_*ley 12 c memory embedded struct

背景:编译器可以在结构中插入填充以使其成员更好地对齐.这将导致结构的大小大于其成员大小的总和.重新排序结构的成员以便它们更好地打包可以消除编译器以这种方式填充的需要并使结构更小以节省内存.我需要节省内存.

后备选项是手动检查每个结构.我正在寻找一种可以减少工作量的自动化方法.

即使它只减少了手工检查的结构数量,也会有所帮助.

因此,例如,一个进程/工具/等列出了大于其成员大小总和的所有结构,虽然不完美仍然有用,因为它会限制需要手动检查的结构.

有没有人知道任何可以做到这一点的工具,或者任何人都可以建议任何可能有用的方法.

ps我需要在包含超过100万行代码的嵌入式C代码库中执行此操作.

caf*_*caf 10

pahole是为此特定目的而编写的实用程序.它将分析您编译的目标文件(使用调试启用编译),并显示结构孔.


erg*_*sys 9

gcc的-Wpadded警告选项可用于告诉您何时填充结构.这不会告诉您何时可以缩小结构,但它可以帮助减少工作量.