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

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

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

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

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

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

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

你可能感兴趣的:(static)