【发布时间】:2021-08-27 18:51:12
【问题描述】:
函数通常被声明为非静态的,因为它们可能在其他目标文件中被调用。
我只是好奇有没有
- 仅在源文件中定义和使用的几个函数,
- 拥有许多此类源文件并且
- 将这些函数声明为静态而不是非静态,
这将改善链接时间。如果只在同一个源文件中使用和定义,是否值得将它们设为静态?
【问题讨论】:
-
是的。不仅因为链接时间,还因为 ODR。
-
它将减少符号表的大小和修正的数量,简化链接器的工作。链接时间的改进不太可能值得更改源代码。
-
作为一般规则,我会说函数和其他符号最好定义为静态或默认设置为“不可见”。如果有必要在外部引用它们,则需要将其提升为非静态或可见的。这不是为了缩短链接时间,而是为了提高(内部或外部)API 的稳定性。
-
而不是声明内部函数
static使用未命名的namespace请参阅 en.cppreference.com/w/cpp/language/namespace#Unnamed_namespaces "...未命名的命名空间以及在未命名的命名空间中直接或间接声明的所有命名空间都有内部链接,...” -
@Cheatah Well API 分离是另一个话题。
标签: c++ c function static linker