【问题标题】:Does GCC optimize calling conventionsGCC 是否优化调用约定
【发布时间】:2014-04-15 09:22:32
【问题描述】:

我想知道,是否可以显式指定自定义调用约定,但考虑到编译器中发现的优化的成熟度和数量,当没有指定调用约定时,我可以期望编译器为特定的功能,例如如果参数很少并且原始使用fastcall等等......

【问题讨论】:

  • 如果函数不是static,编译器必须符合它的标准调用约定
  • 如果编译器可以同时看到调用站点和函数体(它需要这样做),它无论如何都可以内联调用。
  • @NiklasB。并且链接器会看到所有的调用站点并且可以做它想做的任何事情

标签: c++ gcc compiler-optimization calling-convention


【解决方案1】:

这是一个“约定”是有原因的。每个人都必须遵守约定,否则你不能从另一个模块调用你的函数。

但是,如果函数不可见,则 GCC 有选项。它可以内联该函数,也可以根据需要调用它。它甚至可能将其拆分为“热”和“冷”部分并内联热代码路径。这通常仅在使用配置文件引导优化进行构建时发生。

如果您希望 GCC 进行类似的优化,请隐藏您的函数。如果您正在构建可执行文件,请查看 -fwhole-program。如果您正在构建库,请查看 -fvisibility=hidden。还要查看 -flto。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2021-12-20
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多