__attribute__

__attribute__是GCC编译器提供的一种扩展语法,用于指定变量、函数、类型等的属性。__attribute__可以用于指定变量的对齐方式、函数的调用约定、类型的大小等属性,从而对程序的性能、可移植性等方面进行优化。

__attribute__的常用属性:

类型 作用
aligned(n) 指定变量的对齐方式,n表示对齐字节数
packed 指定结构体或联合体的成员按照1字节对齐
section(“name”) 指定变量或函数所在的段名
unused 告诉编译器该变量或函数未被使用,避免编译器产生警告
deprecated 告诉编译器该变量或函数已经过时,避免编译器产生警告
noreturn 告诉编译器该函数不会返回,避免编译器产生警告
format 指定函数的参数格式,用于检查printf和scanf等函数的参数类型
constructor 指定函数为构造函数,在程序启动时自动执行
destructor 指定函数为析构函数,在程序结束时自动执行

举例:

struct  _log_
{
    uint8_t  idx;
    uint16_t time;
    uint32_t tick;
    uint8_t  res;
    uint8_t  data[56];
};

//!  sizeof(_log_) == 68
struct  __attribute__((packed))  _log_
{
    uint8_t  idx;
    uint16_t time;
    uint32_t tick;
    uint8_t  res;
    uint8_t  data[56];
};
//!  sizeof(_log_) == 64

未使用__attribute__关键字时,结构体根据成员中最大字节对象所占字节数(4byte)对齐,前两个字节只占3个字节,不满4byte倍数自动补齐1byte,第四、五个同理补齐3byte,合计1+2+(1)+4+1+56+(3)=68

你可能感兴趣的:(c++,开发语言)