博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GNU C - Using GNU GCC __attribute__ mechanism 02 Variable Attribute && Type Attribute
阅读量:6875 次
发布时间:2019-06-26

本文共 2268 字,大约阅读时间需要 7 分钟。

上篇文章中介绍了 __attribute__ mechanism  Function Attribute   参考链接:

 

我不喜欢对自己写的文章做过多的修饰,所以很不注重排版,喜欢走简约路线.  所以如果您认为我的博文排版很差而忽略文章内容的话,那么我

只能说我注重技术,不注重次要的浪费时间的无价值动作.  如果您可以对我的博文进行批评指正的话,那我这里谢过了.技术嘛,需要多讨论,多

研究,不是写出来给别人赞扬的.(上述仅代表我个人观点,如果您不喜欢,请原谅.)

 

下午有事出去了,直到刚才才回宿舍洗完澡,现在听着音乐,静下心来继续未完成的工作.

 

在之前的文章中,我给出了很多的实例操作.  在这篇文章中我就不再给出实例了,因为方法都已经很明确了.大家可以自己尝试,若有一两个的确需要给出实例

的,我会给出参考实例的.

 

一、 Variable Attribute

1. __attribute__((alias)) : 在之前的文章中有说过对于函数的限定,在这里是对变量的限定,用法很相似:

type newname __attribute__((alias("oldname")));

 

 其中的newname和oldname都不需要再解释了,和前面的文章中说的一样. 在使用的时候对于newname的操作,就是对oldname的操作.

 

2. __attribute__((aligned(ALIGNMENT))): 指定变量或结构体最小字节对齐数,以byte为单位.  

  ALIGNMENT: 指定的字节对齐操作数.

   其他的就不多说了,因为关于字节对齐这部分的内容如果需要说明白,可以单独写一篇博文了,考虑一下,有时间我回补充这一节,单独写一篇.

 

3.__attribute__((cleanup(cleanup_function)): 当一个变量的作用域消失时,便会执行后面的clean_function函数.

                   如何去理解这一点呢? 就好像是C++中的智能指针一样,当离开它的作用域的时候就会被销毁.通过使用 __attribute mechiansm cleanup属性也可以做

                   到.

 

4.__attribute__((deprecated(MSG))): 注明这是一个被弃用的变量,前面说到的是弃用的函数.

               MSG: 输出的信息.

               如果被弃用的变量在其他的地方被使用了,那么编译器就会输出warnning.但是编译还是会通过. warnning的信息中包括有弃用变量被使用的未知,通常是

               指在某个文件中某行这类的信息.

               使用方法和弃用函数的方法一样.

 

5. __attribute__((section("section-name"))): 这个是我在前文中说过的.

 

6. __attribute__((packed)): 使变量或者是结构体按照最小的对齐方式,对于变量是1byte对齐,对于字段,也就是field指bit对齐.

            这个会放到后面和前面的aligned一起作为字节对齐的讨论内容.

 

7.__attribute__((weak)) : 这个很搞了,官网上的手册只是丢了一个链接 那就是去参考Function Attribute中weak attribute的用法.所以我也就不多说什么了.

 

 

二、Type Attribute

1.__attribute__((aligned(ALIGNMENT))) : 字节对齐,和前面的用法差不多,注意使用aligned attribute使变量或者是结构做字节对齐的时候,对齐后只会增大或者不变.

     

struct S { short f[3]; }  __attribute__((aligned(8)));typedef int more_aligned_int __attribute__((aligned(8)));

 

如上面所示, struct  S 指定了对齐的方式是8byte. f[3]总共是6byte.而由于指定了字节对齐操作数是8,所以整个S结构体就是8byte.

 

2.__attribute__((packed)): 前面已经介绍过了 packed attribute. 和前面的aligned不同的是,packed采用的是紧凑型的字节对齐方式,所以最后是会按照最小对齐方式执行.

struct unpacked_struct{         char c;         int     i;};struct __attribute__(( packed )) packed_struct{          char c;          int     i;          struct unpacked_struct us;};

 

 在上面的示例代码中,我们可以看到,在指定了packed对齐方式的struct packed_struct中有一个没有指定对齐方式的struct unpacked_struct对象。

 尽管我们对结构体packed_struct进行了packed方式的对齐,但是不能对其成员us进行指定字节对齐. 这点是需要注意的,所以如果需要对packed_struct结构进行packed完全紧凑对齐,

 则需要对unpacked_struct进行packed方式紧凑对齐.

 

 

 

 OK,把上午剩下的任务补上了...

 

 

 

 

 

 

转载于:https://www.cnblogs.com/respawn/archive/2012/07/09/2583651.html

你可能感兴趣的文章
开启智慧新生活 新余市智慧城市建设全省率先
查看>>
智慧东湖让城市慢游更幸福
查看>>
陕西联通推进高速公路WiFi覆盖
查看>>
Linux之iconv转换文本格式的问题
查看>>
linux 用户权限和组权限
查看>>
RPM的使用
查看>>
我的友情链接
查看>>
lvs
查看>>
原型图设计软件
查看>>
setTimeout和setIntelval的区别
查看>>
[C#]通过方法获得游戏人数和玩家姓名
查看>>
How to rotate a bitmap
查看>>
spring常见注解
查看>>
我的友情链接
查看>>
Linux 磁盘分区
查看>>
基于虚拟用户的邮件服务器在企业网中的应用
查看>>
android开发中shape的绘制
查看>>
在XP系统下安装ubuntu12.04
查看>>
数据库同步过程中一致性和完整性的保证
查看>>
VC++中图像处理类CBitmap的用法
查看>>