【问题标题】:Do C# optimizers perform copy elision?C# 优化器是否执行复制省略?
【发布时间】:2016-01-27 07:31:57
【问题描述】:

我正在寻找优化一些 C# 代码,我很好奇我的优化器是否会执行任何copy elision,如果是的话,是哪种类型。我无法通过谷歌搜索找到任何关于此的信息。如果不是,我可能想切换我的方法以通过引用获取结构参数。我关心的环境是 Unity 3D,这很奇怪,因为它使用 Mono 2.0 运行时或 Unity 的 IL2CPP transpiler(我可能应该直接问他们,因为它是封闭源代码的。)但了解微软的会很有趣优化器也是如此,如果标准通常允许这种类型的优化。

旁注:如果优化器不支持这一点,如果我能获得与 C++ const ref but it appears this doesn't exist 等效的内容,那就太好了。

【问题讨论】:

    标签: c# optimization unity3d mono il2cpp


    【解决方案1】:

    我可以代表 IL2CPP,并说它不会做任何事情来通过引用获取结构参数。即使无法访问 IL2CPP 源代码,您也可以通过检查生成的 C++ 代码看到这一点。

    请注意,C# 结构由 C++ 结构表示,而 C++ 结构是按值传递的。我们已经讨论了在这种情况下使用 const 引用的可能性,但我们还没有实现(而且我们可能永远不会)。

    【讨论】:

    • 如果您使用的是IL2CPP,输出目录会因平台而异。例如,在 iOS 上,您可以在 Class/Native 目录的输出 Xcode 项目中找到生成的代码。查看这篇博文了解更多详情:blogs.unity3d.com/2015/05/13/…
    • 谢谢!实际上,在这种情况下可能会发生复制省略,因为现代 C++ 优化器如果确定即使您不通过 const ref 传递它也不会引起副作用,则允许这样做。它可能会发生也可能不会发生,具体取决于优化级别和您使用的优化器/标准(并且 C++11 允许 further optimizations 在某些情况下使用移动构造函数而不是复制构造函数。)但通常这对表现!我不知道我可以检查中间 C++...我在哪里可以找到它?
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 2023-03-18
    • 2021-10-29
    相关资源
    最近更新 更多