C语言 __attribute__ 关键字理解

出现的问题

下面是一段redis源码,其中出现了__attribute__,那么它到底是啥意思呢?

//redis-6.0.5/src/sds.h
struct __attribute__ ((__packed__)) sdshdr64 {
     
    uint64_t len; /* used */
    uint64_t alloc; /* excluding the header and null terminator */
    unsigned char flags; /* 3 lsb of type, 5 unused bits */
    char buf[];
};

此处__attribute__ ((packed)) 的作用是告诉编译器取消结构体在编译过程中优化内存对齐,按照实际占用字节数对齐。为什么不用内存对齐呢?内存对齐可以提高cpu读取效率,个人理解为,redis在保证性能的前提下这么做是为了节约内存和快速寻址。
GNU C的一大特色就是__attribute__机制。

  • __attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
  • __attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。
  • __attribute__语法格式为:attribute ((attribute-list))
  • 其位置约束:放于声明的尾部“;”之前

attribute的相关资料

gun的文档:

  • 函数属性(Function Attribute)http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
  • 变量属性(Variable Attribute)http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
  • 类型属性(Type Attribute)http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html

一些参考过的博客:

  • 这个总结的很全:https://www.jianshu.com/p/29eb7b5c8b2d
  • 这个很通俗易懂:http://blog.chinaunix.net/uid-25768133-id-3485479.html

你可能感兴趣的:(C,源码,redis,c语言,redis)