GNU C中的__attribute__

时间:2009-09-22 07:17:11

标签: function gcc declaration

为什么以及如何在GNU C程序中使用__attribute__

4 个答案:

答案 0 :(得分:33)

GCC属性:

  • 描述的功能属性here
  • 描述的变量属性here
  • 类型属性here

答案 1 :(得分:25)

对于GCC和GCC兼容的编译器使用__attribute__的大多数其他编译器使用#pragma指令。

我认为GCC的解决方案更好,因为无法识别的#pragma的必需行为是忽略它,而如果你使用不理解__attribute__规范的编译器,它将无法编译 - 通常会更好,因为你知道你需要移植什么。

属性规范用于指定类型,数据和功能的方面,例如无法使用C指定的存储和对齐。通常这些是特定于目标的,大多数是非可移植的,当然在编译器之间,通常在目标之间。除非对代码的正确功能有绝对必要,否则请避免使用它们。

答案 2 :(得分:16)

一种用途是在变量和结构成员上强制执行内存对齐。例如

float vect[4] __attribute__((aligned(16)));

确保将vect放在16字节的内存边界上。我不知道这是gcc-ism还是更普遍适用。

编译器通常只在4字节边界上对齐vect。通过16字节对齐,它可以直接与SIMD加载指令一起使用,您可以将其加载到128位寄存器中,允许加法,减法,点积和各种矢量运算。

有时您需要对齐,以便结构可以直接覆盖到内存映射的硬件寄存器上。或者它必须对齐,以便硬件可以直接写入它使用直接内存访问(DMA)机制。

答案 3 :(得分:-5)

为什么在C程序中使用它?限制他们的便携性。

它以双下划线开头,因此它位于实现者的命名空间中 - 它不是由语言标准定义的内容,并且每个编译器供应商都可以将其用于任何目的。

编辑:为什么在GNU C程序中使用它?请参阅解决此问题的其他答案。