GNU C机制之__attribute__

0 Preface/Foreword

__attribute__(attribute),是GCC的扩展功能,用于设置变量(Variable Attribute)、类型(Type Attribute)、函数的属性(Function Attribute)。 

跨平台中,需要考虑的问题如下:

  • endian order(字节序)
  • variable length(变量长度)
  • memory aligned(内存对齐) 

字节序:表示数据的高字节存在内存的地位还是高位;数据低字节存在低内存,那么就是小端对齐;数据的高字节存在低内存,那么就是大端对齐;

变量长度:在不同的编译器中,同一种数据类型,变量所占用的内存会存在差异,比如int类型,有些编译器为2字节,有些编译器为4字节;当然还会根据操作系统而产生差异,比如32bit的操作系统,指针变量为4个byte,但是64-bit操作系统,指针变量为8个byte;

内存对齐:不同的操作系统存在差异,有些操作系统没有内存对齐那么等同于1字节对齐;有些系统默认4字节内存对齐,也有写系统默认是8字节对齐; 

1 packed功能介绍

用于取消内存对齐功能(1字节内存对齐),格式为:

__attribute__((packed))

2 aligned功能介绍

用于设置内存对齐方式(需要编译器和系统都支持),格式为:

__attribute__((aligned(2)))

__attribute__((aligned(4)))

__attribute__((aligned(8)))

3 at功能介绍

用于固定变量位置,可以为flash位置(用于芯片相关特性,固化信息,出厂设置的参数),也可以是RAM位置,可以通过map文件进行查看具体效果,格式为:

__attribute__((at(0xxxxxxxxx)))

你可能感兴趣的:(Linux,C,编程,gnu)