一套完全自由的操作系统都有这个秘密.doc

上传人:白大夫 文档编号:3362133 上传时间:2019-08-18 格式:DOC 页数:4 大小:20KB
返回 下载 相关 举报
一套完全自由的操作系统都有这个秘密.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一套完全自由的操作系统都有这个秘密.doc》由会员分享,可在线阅读,更多相关《一套完全自由的操作系统都有这个秘密.doc(4页珍藏版)》请在三一文库上搜索。

1、一套完全自由的操作系统都有这个秘密GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统,它在编写Linux的时候自己制作了一个标准成为GNU C标准,但是作为GNU C一大特色的_attribute_机制却为许多人所不知,现在让我们一起走进_attribute_的世界,来揭开它的神秘面纱。对于GNU C的_attribute_机制,它有什么神奇的作用呢?你们是不是已经迫不及待了,对于_attribute_它可以修饰变量属性和函数属性,它的语法格式为:“_attribute_(参数);”,下面我们慢慢道来。当我们初次

2、学习一门语言的时候,都会写一个很经典的程序,没错就是在屏幕上输出Hello world,现在对我们来说写一段hello world程序,都是顺手捏来的事了,那么你看过这样的Hello world吗?#include#include_attribute_(constructor() void pre_proc_1(void) printf(nhello worldn); _attribute_(destructor() void end_proc_1(void) printf(nHello Worldn,_LINE_); int main(int args,char *argv) return

3、0; 可以猜到程序输出什么结果吗?没错也是输出Hello world,直到为什么这样吗?细心的人肯定看到了在两个子函数前面使用了_attribute_(constructor()和_attribute_(destructor)来修饰子函数,那么它们的作用是什么意思呢?被_attribute_(constructor()修饰的函数在主函数前执行,_attribute_(destructor()修饰的函数在主函数后执行,我们还可以在_attribute_(constructor(101)在数字,括号中的数字代表函数的优先级,这样我们就可以安排我们函数执行的顺序了,一般0-100为系统使用,我们可以

4、使用100以后的数字,在VC下也有这个属性但是不能添加数字作为优先级,但是我们可以安排我们函数的声明顺序来实现函数的执行顺序。经过一个简单有意思的程序,下面我们继续来说_attribute_机制,在前面说道_attribute_可以修饰变量和函数属性,下面总结了如何使用_attribute_来修饰变量和函数,让我们一起来感受它的神奇。函数属性(1)_attribute_(format(archtype,string-index,first-to-check);format属性告诉表达式按照printf,scanf,strftime,strfmom参数表格式规则对该函数的参数进行检查。例:_at

5、tribute_(format(printf,m,n);_attribute_(format(scanf,m,n);m:第几个参数为格式化字符n;在参数集合中排在第几(2)_attribute_(noreturn);该属性通知编译器从不返回值,当遇到类似函数需要返回值却不可能运行到返回值就已经退出的情况该属性可以避免出现错误信息,例如C语言中的abort()和exit()函数就使用到了该属性。(3)_attribute_(const);该属性只能用于带有数值类型参数的函数上,当反复调用带有数值参数的函数时,由于返回值是相同的,所以编译器可以进行优化处理,除第一次需要运算外,其他只需返回第一次运

6、行的结果,进而再快了执行效率。(4)Noinline 例:int a _attribute_(aligned(16) = 0;变量a将以16位对齐,我们也可以不加数字,如_attribute_(aligned);这样编译器会根据目标机器的情况实现对齐。它不仅可以修饰单个变量,也可以修饰符合变量如结构体,联合等,在实际中会用于修饰结构体,是结构体中的成员按一定的方式字节对齐。(2)_attribute_(packed);例:int a10 _attribute_(packed);前面说了字节对齐属性,有的编译会默认使用一种字节对齐方式,假如我们不想使用字节对齐该怎么做呢?该属性就起到了这个作用,

7、使用packed可以取消字节对齐方式。(3)_attribute_(at(address);例:int a _attribute_(at(0x00);在一些特殊的情况,我们需要将某个变量存放特定的位置时,该属性就起到了作用,该属性的作用就是将变量a存储到绝对地址为0x00的位置处。(4)_attribute_(section(“section_name”);例如:int a(void) _attribute_(seciton(abc); 说了前面的at属性,现在我们来说seciton属性,他和at有些相同,他的作用是将作用的函数或指定的数据放入指定名为Section_name的段中,一般在汇编文件中我们会使用到。(5)_attribute_(cleanup(函数名)该属性来修饰一个变量,当变量的作用域结束时,调用一个指定的函数。例如:void print()(printf(“nendn”); void text() Int a _attribute_(cleanup(print) = 10; 看了这么多属性的作用,大家是否感觉到了GNU编译器的神奇呢?对于_attribute_关键字,大家是否有了更进一步的认识呢?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1