【发布时间】:2017-04-03 09:03:36
【问题描述】:
最近了解到“backtrace”函数的存在。 该函数允许在某些情况下检索没有调试信息编译的 ELF 运行程序的调用堆栈。
这对我来说是完美的(我不能在生产程序中插入调试符号),但是要让“回溯”工作,(大致)有两个条件:
- 告诉链接器添加额外信息(通过传递 -rdynamic 选项)。
- 将所有“静态”函数转换为“非静态”函数。
我担心的是,如果我满足这两个条件,我的程序会变慢(因为编译器不能像优化静态函数一样优化非静态函数?)。 据我所知,使用 -rdynamic 添加额外信息不会影响程序的性能:它只是给 ELF 二进制文件增加了一点权重。
这是我的问题:
当所有静态函数都变成非静态函数时,对运行性能有什么影响?
【问题讨论】:
-
'static' 只影响范围/可见性,不是吗?
-
我忘了写下来,但据我所知,是的,静态影响范围/可见性。我怀疑的地方是“静态”是否只影响范围/可见性。我认识的人说这也可能影响编译器优化,但他无法用源代码支持他所说的话,他也不确定。如果因为编译器需要计算额外的步骤来进行相同的优化而在编译时出现停机时间,那么它不会打扰我。但如果运行时出现停机,则值得考虑。
-
这与 C 或 C++ 有关吗?可能相关:stackoverflow.com/questions/572547/… 如果我没记错的话,C 中的
static只能用于变量,不能用于函数; statc 函数是什么意思? -
它仅用于 [c]。静态函数是仅在声明该函数的 .c 文件中可见的函数。
标签: c