我还需要哪些其他编译器来担心结构打包?

What other compilers do I need to worry about struct packing?

在 GCC 中,我需要使用 __attribute__((packed)) 使结构占用最少的 space,例如,如果我有大量结构,我应该将它们打包。还有哪些其他常见编译器执行结构填充,我如何在这些其他编译器中打包结构?

你提问的前提是错误的。压缩结构不是您“应该使用”来保存的东西 space。它们是一个可疑的非标准特性,有很多应该尽可能避免的问题。 (最终总是有可能避免它们,但有些人对所涉及的权衡犹豫不决。)例如,无论何时使用打包结构,任何使用指向成员的指针都可能是不安全的,因为指针值不一定是有效的(正确对齐)指向它指向的类型的指针。唯一一次“需要”压缩结构是当您使用它们来访问未对齐的内存映射硬件寄存器,或访问未对齐的 in-file/on-disk 数据结构时(但后者不会无论如何都是可移植的,因为 representation/endianness 可能不匹配,并且通过适当的 serialization/deserialization 函数可以更好地解决这两个问题。

如果你的目标是保存space,那么只要你控制结构的定义,简单的排序,以免留下不必要的填充space。这可以简单地通过按大小递减的顺序对成员进行排序来实现;如果你这样做,那么在任何合理的实现中,浪费的 space 最多是最大成员的大小与最小成员的大小之间的差异。