我总是忘记在我的变量和函数中添加“静态”前缀,因此 GCC 将它们标记为外部。是否可以更改此行为,以便默认情况下将所有内容标记为静态。并且这两种类型在运行时是否存在性能差异,还是更像是一种形式?
问问题
107 次
2 回答
5
是否可以更改此行为,以便默认情况下将所有内容标记为静态。
据我所知不是。
并且这两种类型在运行时是否存在性能差异,还是更像是一种形式?
是的,在指定gcc
对象或函数时能够执行进一步的优化static
。例如,gcc
(even in -O0
) 将内联static
只调用一次的指定函数。
于 2013-01-23T22:47:29.917 回答
1
首先:extern
修饰符不是默认的。该限定符表示提到的项目将在另一个编译单元中定义,因此它仅适用于声明全局变量之类的内容。
没有办法使static
修饰符成为默认值,因为没有dynamic
修饰符可以取消这个默认值。因此,没有办法编写具有该默认值的工作代码:每个函数和变量都是static
,这将导致编译器生成一个空的输出文件!
这两种类型在运行时是否存在性能差异,还是更像是一种形式?
编译器可以对static
函数和变量进行一些优化,而这些优化是动态的。特别是,static
从未引用的函数和变量可能会被完全删除,并且static
可以更积极地内联函数。
于 2013-01-23T22:54:30.307 回答