[随笔]gcc的__attribute__编译属性

本文介绍了GCC的__attribute__编译属性,特别是section子项的使用,用于改变函数和数据的特性。讲解了输入段和输出段的概念,并给出将变量和函数放入特定输入段的示例。还列举了支持的变量属性,包括address、aligned、section等,并提到了如何指定多个属性及避免宏冲突的方法。
摘要由CSDN通过智能技术生成

注:此文非原创,是博主在学习过程中网络摘抄整理而出。

__attribute__主要用于 改变所声明或定义的函数或数据的特性,它有很多子项,用于改变作用对象的特性。

比如,对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。

这里我们聊聊对代码段起作用的子项section。
__attribute__的section子项的使用格式为:

__attribute__((section("section_name"))) 

其作用是 将作用的函数或数据放入指定名为”section_name”输入段。

这里还要注意一下两个概念:输入段和输出段

输入段和输出段是相对于要生成最终的elf或binary时的Link过程说的,Link过程的输入大都是由源代码编绎生成的目标文件.o,那么这些.o文件中包含的段相对link过程来说就是输入段。

而,Link的输出一般是可执行文件elf或库等,这些输出文件中也包含有段,这些输出文件中的段就叫做输出段。

输入段和输出段本来没有什么必然的联系,是互相独立,只是在Link过程中,Link程序会根据一定的规则(这些规则其实来源于Link Scriptÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值