首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于_attribute_的用法咨询,该怎么处理

2013-08-13 
关于_attribute_的用法咨询一:在代码中看到如下定义:#define __exit__attribute__ ((unused, __section__(

关于_attribute_的用法咨询
一:
在代码中看到如下定义:
#define __exit          __attribute__ ((unused, __section__(".text.exit")))

unused是个枚举变量
typedef enum {
unused, mode, motion, report
} command_types;

这个attribute的用法是什么,该怎么来表示。和下面这种用法有什么区别:
__attribute__ ((__section__ (".initcall" levle ".init"))),输入段的名称由level决定,如果level="1",则输入段是.initcall1.init,如果level="3s",则输入段是.initcall3s.init。 


_attribute__的section属性只指定对象的输入段,它并不能影响所指定对象最终会放在可执行文件的什么段。
问题:既然只是放入不同的输入段,最终经过链接之后不同的输入段还是会重新组合到不同的输出段中,那么_attribute_这个关键字的意义何在,放入制定的输入段有什么

三:
_attribute_修饰一个函数的时候,会指定函数放到某个输入段中去,那函数内部变量以及执行语句该如何来放呢,正常应该是放入.data和.text段中去的
[解决办法]
http://blog.csdn.net/sunboy_2050/article/details/6566739
[解决办法]
它并不能影响所指定对象最终会放在可执行文件的什么段

这个应该说的是装载视图,可执行文件装载的时候并不按照段名来装载而是依据段的相关属性。
_attribute__的section属性只指定对象的输入段,在文件里的段还是确定的,这个叫链接视图。

函数内部的变量属于代码并不会有数据。所以加了这个之后应该全在这个段内,全是代码。

你可以试试,编译出汇编文件后看看
[解决办法]
__attribute__的section属性指定对象的输入段, 相当于给这个code段起个名字,在可执行文件加载的时候可以按照你的意愿进行加载域分配,便于管理flash代码分布,可执行RAM的分配。
[解决办法]
gcc编译器的相关东西
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Attribute-Syntax.html#Attribute-Syntax

热点排行