我是靠谱客的博主 贪玩星月,最近开发中收集的这篇文章主要介绍C++学习 __attribute__ ((packed)) 的作用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在看我们的代码的时候发现声明类型的时候有 __attribute__ ((packed))的结构体类型声明,如下:

[cpp] view plain copy print ?
  1. typedef struct Student  
  2. {  
  3.     int SID;  
  4.     char SName;  
  5. }__attribute__((packed)) Sinfo;  
<span style="font-size:12px;">typedef struct Student
{
    int SID;
    char SName;
}__attribute__((packed)) Sinfo;</span>

 

不知道是什么意思,查了下知道是如下含义:

1. __attribute__ ((packed)) 的作用就是告诉编译器,取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的。在windows下用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:
在TC下:struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;(紧凑模式)
在GCC下:struct my{ char ch; int a;} sizeof(int)=4;sizeof(my)=8;(非紧凑模式)

在GCC下:struct my{ char ch; int a;}__attrubte__ ((packed)) sizeof(int)=4;sizeof(my)=5

2. __attribute__关键字主要是用来在函数或数据声明中设置其属性。给函数赋给属性的主要目的在于让编译器进行优化。函数声明中的__attribute__((noreturn)),就是告诉编译器这个函数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码。
GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
__attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。
__attribute__语法格式为:
__attribute__ ((attribute-list))
其位置约束:放于声明的尾部“;”之前。

函数属性(Function Attribute):函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU应用程序做到兼容之功效。
GNU CC需要使用 –Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。
packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。

最后

以上就是贪玩星月为你收集整理的C++学习 __attribute__ ((packed)) 的作用的全部内容,希望文章能够帮你解决C++学习 __attribute__ ((packed)) 的作用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部