4

在我们的项目中,我们有大约 50K 行的相当大的 C 文件,是在 90 年代编写的。我想根据功能拆分文件。但是,这个文件中的所有函数都被声明为静态的。所以,文件范围。如果我拆分文件,则 file1 中的函数无法调用 file2 中的函数,反之亦然。

但是,我的 TL 感觉可以通过使用静态函数来优化内存。我写了一些示例代码来查看不同线程的堆栈是否不同。好像是这样。有人可以告诉我静态函数和普通函数之间的区别吗?

4

3 回答 3

7

在 C 中,定义函数时,static关键字具有以下两个主要后果:

  1. 防止函数名称被导出(即函数没有外部链接)。因此,防止来自代码其他部分的链接/直接调用。

  2. 由于函数被明确标记为文件私有,编译器可以更好地为函数生成完整的调用图。这可能会导致编译器决定自动内联函数以获得更好的性能。

于 2013-08-13T03:03:08.737 回答
3

所有函数都隐式声明为 extern,这意味着它们在翻译单元中可见。但是当我们使用静态时,它会将函数的可见性限制在定义它的翻译单元中。所以我们可以说只对同一文件中的其他函数可见的函数称为静态函数。

于 2013-08-13T04:37:05.070 回答
0

最重要的区别是您不能在任何其他文件中调用静态函数。我想是的,是吗?

于 2013-08-13T03:39:03.253 回答