gpt4 book ai didi

c++ - GCC 5.3 : -fno-semantic-interposition 中的新选项

转载 作者:可可西里 更新时间:2023-11-01 17:58:18 25 4
gpt4 key购买 nike

GCC 5.3 添加了一个新选项:-fno-semantic-interposition

A new -fno-semantic-interposition option can be used to improve code quality of shared libraries where interposition of exported symbols is not allowed.

这听起来像是对 C++ 项目有用的东西,在这些项目中无论出于何种原因都不能使用插入,但延迟是一个问题。

但是,描述相当模糊。有谁能够阐明此选项的确切工作原理吗?

最佳答案

-fno-semantic-interposition 可以显着提高共享库中代码的性能,但在某些情况下可能会改变语义。

默认情况下,GCC 尊重 ELF 符号插入语义。简而言之,任何导出的库函数(即任何使用默认编译器标志编译的库函数)都可以在运行时通过 LD_PRELOAD 替换,或者简单地由恰好加载的另一个共享库中的同名函数替换早些时候通过动态链接器。这会阻止编译器进行大量有用的分析和优化(最显着的是内联和克隆),因为它们可能会破坏插入。

-fno-semantic-interposition 允许编译器忽略潜在的插入并更积极地进行优化。

正如我所说,使用 -fno-semantic-interposition 有一些注意事项:

  • 它可能会改变您程序的行为(当它实际上依赖于干预时,有时您并没有意识到这一点)
  • 它只与共享库相关(与可执行文件无关)
  • 如果您已经对库进行了适当的优化(即使用 -fvisibility=hidden 进行编译并使用 __attribute__((visibility("default") )))

第一项阻止-fno-semantic-interposition 的广泛部署。例如。据我所知,没有 Linux 发行版广泛使用它(顺便说一句,这将是一个很棒的项目)。

顺便说一下,Clang 编译器默认启用了 -fno-semantic-interposition,大概是为了性能。他们 have一个反向 -fsemantic-interposition 标志,以启用与 GCC 兼容的 ELF 插入语义。

关于c++ - GCC 5.3 : -fno-semantic-interposition 中的新选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35745543/

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