Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JIT编译器及其在c++;_C#_C++_.net_Performance_Jit - Fatal编程技术网

C# JIT编译器及其在c++;

C# JIT编译器及其在c++;,c#,c++,.net,performance,jit,C#,C++,.net,Performance,Jit,我们知道,.net有CLI和JIT来执行程序。但这两个阶段可能会导致比在一个阶段编译所有代码的C++速度和性能要低。我想知道.net的语言如何克服这个缺点并处理它 < P>两个C++编译器都工作过,过去几年都在.NET JIT上工作,我认为有一些值得考虑的事情: 正如许多其他人所指出的,JIT是在应用程序的进程中运行的,它试图在快速JIT时间和JIT代码的质量之间谨慎地平衡。在C++中,更精细的优化通常带有非常高的编译时间价格标签,并且在编译时间和代码质量图中有一些非常尖锐的膝盖。 预jit似

我们知道,.net有CLI和JIT来执行程序。但这两个阶段可能会导致比在一个阶段编译所有代码的C++速度和性能要低。我想知道.net的语言如何克服这个缺点并处理它

< P>两个C++编译器都工作过,过去几年都在.NET JIT上工作,我认为有一些值得考虑的事情:

  • 正如许多其他人所指出的,JIT是在应用程序的进程中运行的,它试图在快速JIT时间和JIT代码的质量之间谨慎地平衡。在C++中,更精细的优化通常带有非常高的编译时间价格标签,并且在编译时间和代码质量图中有一些非常尖锐的膝盖。
  • 预jit似乎可以在某种程度上改变这个等式,因为jit提前运行并且可能需要更多的时间,但是预jit扩大优化范围的能力非常有限(例如,我们尝试避免引入脆弱的跨程序集依赖项,因此例如,不会跨程序集边界内联)。因此,预jitted代码的运行速度往往比jitted代码慢一些,这主要有助于应用程序的启动时间
  • Net的默认执行模型排除了许多过程间优化,因为动态类加载、反射以及探查器在运行过程中更新方法体的能力。我们认为,总的来说,从这些功能中获得的生产力和应用程序架构是值得的。但对于不需要这些功能的情况,我们正在寻找方法,以确保如果你的应用程序不需要这些功能,你的应用程序不会为此付费
  • 例如,我们在CoreRT中正在进行一些“纯”AOT工作,但因此反射是有限的
  • .Net Core 2.1包含了分层jitting的预览,这将允许我们缓解jit时间上的一些限制--我们将能够投入更多的时间使用我们知道经常执行的jitting方法。因此,随着时间的推移,我希望看到更多复杂的优化被添加到JIT中
  • .Net Core 2.1还包括硬件内部函数的预览,因此您可以充分利用现代硬件上丰富的指令集
  • Net的JIT还没有从配置文件反馈中获得多少好处。这是我们正在积极努力改变的事情,尽管这需要时间,而且很可能与分层有关
  • Net执行模型从根本上改变了考虑某些编译器优化的方式。例如,从编译器的角度来看,许多操作(包括字段访问等低级别的事物)可以引起语义上有意义的异常(在C++中,只有调用/抛出会导致异常)。Net的GC是精确的和重新定位的,这在其他方面对优化施加了限制

  • 在你的情况下,这是一个非常重要的缺点,你需要吗?我只想比较C++和.NET性能和执行时间……我想知道如何才能达到.NET中C++的速度。你读过吗?这篇文章不说服我。我认为C++和.NET中编译器的一些东西是我不知道的。请帮助我通过VisualStudio调试器中的代码,查看生成的机器代码(特别是在发布版本中)。然后你可以回答你自己的问题。任何性能开销都可能只是JIT编译的成本,当然还有垃圾收集。同样,在本地C++和.NET中进行一些基准测试。然后你会知道更多。