- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
跟随这个问题:how-do-i-check-if-gcc-is-performing-tail-recursion-optimization ,我注意到将 gcc 与 -fPIC 一起使用似乎会破坏这种优化。我正在创建一个共享库,但我似乎不需要 -fPIC 选项。
那么,我的问题是,为什么 -fPIC 会更改 gcc 优化?我是否出于任何原因需要保留 -fPIC?
最佳答案
在缺少目标体系结构和编译器版本等详细信息的情况下,可能的解释是:
在位置相关代码中,尾递归优化本质上是重用当前栈帧,并替换考虑的call
。通过 jump
.语法可能是 call function
替换为 jmp <small offset of function>
.
在与位置无关的代码中,调用可以写成call function@PLT
如果指令集允许(这个例子是 amd64)。它完全可以替换为 jmp <small offset of function>@PLT
,但是这两个设置确实会产生干扰,也许 gcc 开发人员没有在后一种模式下实现尾调用优化。
关于c - gcc -fPIC 似乎与优化标志混为一谈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1747268/
我喜欢遵守 StyleCop 的格式化规则以使代码清晰明了,但我最近遇到了其中一个警告的问题: All using directives must be placed inside of the na
我看到很多人说 Symfony2、Zend Framework 2 和其他人是事件驱动的。 在桌面世界中,通过事件驱动编程,我理解应用程序会在其状态发生变化时通知其观察者。 由于 PHP 应用程序是无
我是一名优秀的程序员,十分优秀!