相关疑难解决方法(0)

调试和发布版本之间的性能差异

我必须承认,通常我没有在程序中调试DebugRelease配置之间进行切换,我通常选择调试配置,即使程序实际部署在客户端也是如此.

据我所知,如果不手动更改这些配置,这些配置之间的唯一区别是DebugDEBUG定义常量,并且Release已检查Optimize代码.

所以我的问题实际上是双重的:

  1. 这两种配置之间是否存在很多性能差异.是否有任何特定类型的代码会在这里造成性能上的巨大差异,或者它实际上并不那么重要?

  2. 是否有任何类型的代码可以在Debug配置下正常运行,可能在Release配置下失败,或者您可以确定在Debug配置下经过测试和正常工作的代码在Release配置下也能正常工作.

.net c# debugging performance configuration

273
推荐指数
7
解决办法
6万
查看次数

在什么级别C#编译器或JIT优化应用程序代码?

我想知道这些信息以减少我的代码大小,所以我不会浪费时间来优化将由编译器或JIT完成的事情.

例如:

如果我们假设编译器内联调用属性的get函数,那么我不必将返回值保存在局部变量中以避免函数调用.

我想推荐一个描述正在发生的事情的好参考?

.net c# compiler-construction optimization jit

8
推荐指数
2
解决办法
3371
查看次数

用于C/C++的JIT优化器

我正在阅读有关JIT优于预编译的优点,其中之一是JIT可以根据实际运行时数据调整分支预测.自从我在大学写一个编译器以来已经很长时间了,但在我看来,在大多数情况下(没有明确的getos),预编译代码也可以实现类似的东西.

请考虑以下代码:

   test x
   jne L2:
L1: ...
   jmp L3:
L2: ...
L3:
Run Code Online (Sandbox Code Playgroud)

如果我们有一些运行时检测可以看到'jne L2'为真的次数,它可以物理地交换L1:block和L2:block中的所有指令.当然,它必须知道交换期间任何一个块都没有线程,但这些都是细节......

   test x
   jeq L1:
L2: ...
   jmp L3:
L1: ...
L3:
Run Code Online (Sandbox Code Playgroud)

我知道程序代码加载到只读内存等时也存在问题,但这是一个想法.

所以我的问题是,这样的JIT优化是否适用于C/C++,还是我错过了一些无法做到这一点的根本原因?那里有C/C++的JIT优化器吗?

c c++ optimization jit branch

5
推荐指数
2
解决办法
577
查看次数