gpt4 book ai didi

C编译器结构优化

转载 作者:太空狗 更新时间:2023-10-29 17:03:52 25 4
gpt4 key购买 nike

C 标准不允许对结构进行某些优化:例如,重新排列字段、合并字段、丢弃从未读取过的字段、将字段提升到结构之外(如果它们可以转换为自动变量)等。这出于各种原因需要,包括跨编译单元的一致结构布局和允许强制转换兼容的结构。

是否有任何现代编译器(例如 gcc、clang、Visual C)支持允许我告诉它可以进行这些优化的扩展?

自然地,它们只对单个编译单元的局部定义有意义,这样编译器就可以看到结构的所有可能用途;并且某些东西(如上述的强制转换兼容的结构定义)将变得不可用。但对于某些任务,这可能是一个非常有值(value)的优化。

我确实知道 gcc 曾经 有一个 -fipa-struct-reorg 选项来精确地允许这个,但它从来没有很好地工作并且有点腐烂,并且是最终取出。但我不知道它是否被任何东西取代了。而且我一直没能在 clang 中找到任何东西,这让我很惊讶,因为我认为这正是 clang 会结束的那种优化......

最佳答案

没有。没有理由提供这样的东西。

  1. 您不能在获取结构地址并将其发送到任何地方的地方执行此操作,因为它无论如何都可能是别名。这几乎排除了单个函数之外的任何东西。

  2. 如果您可以完成并进行所需的分析以标记结构成员“如果不使用,可以将其优化掉”(当心时髦的偏移计算宏),那么您可以自己看看是否需要它,自己拿出来。

  3. 如果不确定,就把它注释掉,看看是否会出现编译错误。

关于C编译器结构优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898099/

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