static的静态全局变量和静态全局函数与fPIC

本文探讨了static修饰符在C/C++中的作用,特别是如何限制全局变量和函数的作用范围仅限于当前模块,以及这种做法如何避免符号冲突并提高程序运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static修饰的静态全局变量和函数的作用范围只是本模块,其他模块不存在对这些符号的引用。

static修饰的函数也不担心与其他模块存在重名问题。

因此,如果一个变量是static的静态全局变量或者静态局部变量,那么可以使用相对地址寻址,而不需要使用got表。同样一个static修饰的内部函数也是如此,汇编代码中不需要使用got表。这样能够加快函数的访问速度。

全局变量由于不能确定不被其他模块使用,所以必须使用GOT表。

另外,即使确认该模块的全局变量不会被其它模块使用,这个全局变量也不能使用类似模块内的变量的相对地址寻址完成,因为不能保证不发生全局符号介入问题,导致必须进行重定位,因为其被其他模块的同名符号覆盖了,必须重定位到其他模块的这个符号。

在模块内部使用static修饰全局符号和变量即可以减少麻烦还可以加快程序速度,只要保证这些变量和函数不被其他模块使用就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值