【发布时间】:2015-07-21 18:40:23
【问题描述】:
我使用__attribute__((packed)); 使struct 的项目一个接一个地存储在内存中,因为这对于一些低级开发至关重要。
由于__attribute__((packed)); 是特定于 GCC 的,我想知道是否有类似的解决方案适用于所有 ANSI/C89/C99/C11 编译器或至少其中一些编译器。
【问题讨论】:
-
简单回答:否。阅读standard。但是您可以使用条件编译来创建适用于不同编译器的代码。 OTOH,问题更多为什么你要打包
struct。如果是为了序列化,这可能是个坏主意。 -
请注意,GCC 和 Clang/LLVM 可以理解此类属性
-
请注意,使用“属性打包”往往会影响效率——或者,至少,您是以时间效率为代价来交易(获得)空间效率的。如果您不经常访问这些结构,则可能无关紧要。如果你经常这样做,它可能会这样做。
-
@Olaf 我需要这个来确保我的小型爱好操作系统的IDT 以应有的方式存储在内存中。
标签: c gcc struct compiler-specific