gpt4 book ai didi

c - 删除 "static"关键字对函数的影响

转载 作者:行者123 更新时间:2023-12-02 08:14:29 25 4
gpt4 key购买 nike

最近,我了解到“backtrace”函数的存在。该函数允许在某些情况下检索在没有调试信息的情况下编译的 ELF 运行程序的调用堆栈。

这对我来说是完美的(我不能在生产程序中插入调试符号),但是要使“回溯”起作用,有(大致)两个条件:

  • 告诉链接器添加额外信息(通过传递 -rdynamic 选项)。
  • 将所有“静态”函数转换为“非静态”函数。

我担心的是如果我满足这两个条件,我的程序会变慢(因为编译器不能像优化静态函数那样优化非静态函数?)。据我所知,使用 -rdynamic 添加额外信息不会影响程序的性能:它只是为 ELF 二进制文件增加了一点重量。

所以这是我的问题:

当所有静态函数都变成非静态函数时,对运行性能有什么影响?

最佳答案

是的,您的担心是正确的:将函数声明为 static 为编译器提供了一个很好的提示,它可以将其转化为更好的优化。不过,您从 static 获得的加速量取决于您的具体情况,因此只有测量才是真实的(一如既往地涉及到性能)。

将函数声明为static 的要点在于,编译器明确地知道它看到所有 函数的调用位置。如果它发现该函数仅从一个地方调用,它通常会始终内联它,无论它有多长。并且内联可能会释放更多的优化机会。这在大小和速度方面都避免了函数调用开销。这里面,static其实是比inline更强的提示。

当然,对性能的影响取决于对 static 函数的调用频率。因此,正如我所说,您需要进行测量以评估您从 static 关键字中获得了多少性能。

关于c - 删除 "static"关键字对函数的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com