【问题标题】:A __attribute__((packed)) like attribute not GCC Specific类似于属性的 __attribute__((packed)) 不是 GCC 特定的
【发布时间】:2015-07-21 18:40:23
【问题描述】:

我使用__attribute__((packed)); 使struct 的项目一个接一个地存储在内存中,因为这对于一些低级开发至关重要。
由于__attribute__((packed)); 是特定于 GCC 的,我想知道是否有类似的解决方案适用于所有 ANSI/C89/C99/C11 编译器或至少其中一些编译器。

【问题讨论】:

  • 简单回答:。阅读standard。但是您可以使用条件编译来创建适用于不同编译器的代码。 OTOH,问题更多为什么你要打包struct。如果是为了序列化,这可能是个坏主意。
  • 请注意,GCCClang/LLVM 可以理解此类属性
  • 请注意,使用“属性打包”往往会影响效率——或者,至少,您是以时间效率为代价来交易(获得)空间效率的。如果您不经常访问这些结构,则可能无关紧要。如果你经常这样做,它可能会这样做。
  • @Olaf 我需要这个来确保我的小型爱好操作系统的IDT 以应有的方式存储在内存中。

标签: c gcc struct compiler-specific


【解决方案1】:

没有标准的方法来完成__attribute__((packed)) 所做的事情。典型的解决方案是使用#ifdef 来处理不同的编译器。您可以在此SO post 找到此方法的一些解决方案,其中还包含有关 __attribute__((packed)) 的 Visual C++ 等效项的详细信息。或者,GCC supports the Windows struct packing pragmas,所以如果您只关心 Windows 和 GCC,您可以使用 Windows 方法。

【讨论】:

    【解决方案2】:

    不支持控制标准指定的结构布局的功能。该标准简单地说明这方面是实现定义的。

    因此,如果您确实需要控制布局,则需要使用编译器特定的功能。如果您能找到一种方法来完全避免需要这样做,那将是可取的。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2012-07-31
      • 2016-02-17
      相关资源
      最近更新 更多