gpt4 book ai didi

c - gcc -fPIC 似乎与优化标志混为一谈

转载 作者:太空狗 更新时间:2023-10-29 16:09:50 26 4
gpt4 key购买 nike

跟随这个问题: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/

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