__attribute__((packed)) 类非 GCC 特定的属性
A __attribute__((packed)) like attribute not GCC Specific
我使用 __attribute__((packed));
使 struct
的项目一个接一个地存储在内存中,因为这对于一些低级开发至关重要。
由于 __attribute__((packed));
是特定于 GCC 的,我想知道是否有适用于所有 ANSI/C89/C99/C11 编译器或至少其中一些编译器的类似解决方案。
没有标准方法可以完成 __attribute__((packed))
所做的事情。典型的解决方案是使用 #ifdef
来处理不同的编译器。您可以在此 SO post which also contains the details on the Visual C++ equivalent of __attribute__((packed))
. Alternatively, GCC supports the Windows struct packing pragmas 找到针对此方法的一些解决方案,因此如果您只关心 Windows 和 GCC,则可以使用 Windows 方法。
不支持控制标准指定的结构布局的功能。该标准简单地声明这方面是实现定义的。
因此,如果您确实需要控制布局,则需要使用编译器特定的功能。如果您能找到一种方法来完全避免这样做,那将是更好的选择。
我使用 __attribute__((packed));
使 struct
的项目一个接一个地存储在内存中,因为这对于一些低级开发至关重要。
由于 __attribute__((packed));
是特定于 GCC 的,我想知道是否有适用于所有 ANSI/C89/C99/C11 编译器或至少其中一些编译器的类似解决方案。
没有标准方法可以完成 __attribute__((packed))
所做的事情。典型的解决方案是使用 #ifdef
来处理不同的编译器。您可以在此 SO post which also contains the details on the Visual C++ equivalent of __attribute__((packed))
. Alternatively, GCC supports the Windows struct packing pragmas 找到针对此方法的一些解决方案,因此如果您只关心 Windows 和 GCC,则可以使用 Windows 方法。
不支持控制标准指定的结构布局的功能。该标准简单地声明这方面是实现定义的。
因此,如果您确实需要控制布局,则需要使用编译器特定的功能。如果您能找到一种方法来完全避免这样做,那将是更好的选择。