【发布时间】:2021-07-30 20:16:16
【问题描述】:
举例
有一种基于 c++ 的可视化脚本语言(编译语言),我指的是 UE-4 中的蓝图。但这被认为比 c++ 慢,但是为什么?由于 blueprints 再次转换为 c++ 并且是在编译时完成的,所以在运行时应该没有性能差异?
【问题讨论】:
-
C++ 是一种高级语言,也是一种低级语言,也弥合了两者之间的差距。没有人说它慢。但是脚本语言——如果由解释器运行,它们确实会很慢。如果脚本语言生成 C++,那么问题是该 C++ 的质量是否可以与手工编写的内容相媲美。换句话说,当您手动编写 C++ 中的步骤时,您可能会看到优化机会并避免不必要的工作。如果这在这里不适用,那么脚本工具确实会产生与 C++ 一样快的结果。
-
理论上编译代码比解释代码更快。实际上,它是一个混合包。您可以编写一些非常糟糕的慢速预编译代码和一些非常快的解释代码。我的建议,编码,衡量它的性能,然后决定是否需要更多或是否可以接受。
-
(值得注意的是,C++和汇编之间也有类似的关系。C++不可能比精心编写的汇编快,但是没有人有时间在汇编中仔细编写庞大的程序,所以平均而言C++几乎总是更快。类似地,在实际意义上,C++ 倾向于让您编写比 C 更快的程序,主要是因为您可以快速完成非性能关键的事情,然后专注于性能关键,并使用例如模板来在 C 语言中生成需要大量时间的功能的“自定义”实例化)
-
就蓝图而言 - 它可以显式编译为 C++。然而,这是一个相对较新的功能,并不经常讨论。它相当不错但并不完美,本地化代码带有大量的样板,并保留了很多东西,比如过度使用反射和低效的查找。除此之外,您将失去 C++ 对内存分配、多线程、内联汇编、组织热数据/缓存一致性等的控制。无法量化蓝图原生化惩罚的糟糕程度,只能说它介于解释的 bp 之间和原生 C++
-
谢谢大家,我现在明白这是关于程序员获得的控制权,如果使用得当,可以带来更好的优化,而不是从编译器自动翻译代码(即从高级语言翻译成中级语言) ),但我想知道解释器何时优于编译器?,以及每当我们下载软件时,代码是否在安装期间编译,如果没有,那么何时编译?跨度>
标签: c++ performance compilation unreal-engine4 unreal-blueprint