我最近读了一个讨论关于是否管理语言的较慢(或快于)本地语言(具体地C#与C++)。一个人对讨论作出了贡献所说的,即编译器的管理语文将能够使优化有关引用这简直是不可能在语言使用的指针。

我想知道是什么样的优化是可能的参考文献并不是在指点?

注意讨论有关执行速度,不存储器的使用。

有帮助吗?

解决方案

有一些好处 JIT汇编 所提到的在维基百科:

JIT码通常提供更好的绩效比的口译员。此外,它可以在某些或许多情况下提供更好的性能较静态的汇编,作为许多优化只是可行的,在运行时间:

  1. 该汇编可以最优化的目标CPU和操作系统模型的应用程序的运行。例如JIT可以选择SSE2CPU指示当它检测到的CPU支持他们。有一个编译器,静态的一个必须写了两个版本的代码,可能使用内联件。
  2. 该系统是能够收集统计有关的程序如何实际运行环境,它可以重新排列和重新编译为最佳业绩。然而,一些静态的,编纂者还可以采取配置文件的信息作为投入。
  3. 该系统可以做的全球代码优化(例如内联图书馆的功能),而不会失去优势的动态联系和不间接费用所固有静态的汇编者和接头。具体而言,在做的全球内联替换,一个静态的编译器必须插入运行时间将检查和确保一个虚拟的电话会发生,如果实际的类的对象复盖的内联的方法。
  4. 虽然这是可能有静态的编制垃圾收集的语言,特码系统能够更容易地重新整理存储器,用于更好地缓的利用率。

我不能想到的东西相关的直接使用的参考,而不是指针。

其他提示

C++有两个优点的参考相关优化方面:

  1. 参考的是恒定的(指的是同一变量,其整个一生)

    因为这很容易用于编译器,来推断出这名字指的是同样的基础变量-因此建立优化的机会。有没有保证,将编译器会做的更好引用,但它可能...

  2. 基准假设是指什么(没有空参考)

    一个参考,"指的是什么"(相当于空指针)可以建立,但这是不容易的,因为创造一个空的指针。因为这一检查的基准为NULL可以省略。

然而,没有这些优点进行了直接管理的语言,因此我没有看到相关性的,在上下文中讨论的主题。

在一般讲,引用使得能够从不同的地方指的是相同的对象。

一个“指示器”是实现的引用的机构的名称。 C ++,帕斯卡,C ......具有指针,C ++提供了另一种机制(具有稍微其他用例)称为“参考”,但本质上这些是一般参考概念的所有实现。

所以没有理由的引用被定义更快/比指针更慢。

真正的区别在于在使用JIT或经典的“前面”的编译器:所述JIT可以将数据考虑到不可用于向上前编译器。它无关的概念“参考”的执行情况。

其他的答案是正确的。

我想补充一点,任何优化不会使不同的叫声,除非它是在代码中的程序计数器实际上是在不包含函数调用(如比较字符串)紧密循环花费太多的时间,等等。

在一个管理框架的对象引用是从C ++中的过去的基准很大的不同。要了解是什么让他们特殊,想象有以下情形将被处理,在机器的水平,没有垃圾收集的对象引用:方法“富”返回一个字符串,并保存在不同的藏品,并传递给不同的代码块。一旦没有什么需要的字符串的任何更多的,应该可以收回的存储使用的所有记忆,但目前还不清楚是什么一段代码将是最后一个要使用的字符串。

在一个非GC系统中,每个收集要么需要有其自己的字符串的拷贝,否则需要持有包含一个指针,其保持字符串中的字符的共享对象的东西。在后一种情况下,共享对象需要在最后一个指针,它被排除以某种方式知道了。有各种各样的这个可以处理的方式,但他们的一个重要共同点是,共享对象需要通知时,指针将它们复制或销毁。这样的通知要求的工作。

在由对比度的GC系统,程序与元数据来说堆栈帧的部分将在任何给定时间被用来保持根对象引用哪些寄存器或装饰。当垃圾收集循环时,垃圾收集器必须分析这个数据,识别和保存所有活对象,核弹一切。在其他时间,但是,处理器可以复制,替换,洗牌,或破坏任何图案或它喜欢的顺序引用,而无需通知任何涉及到的对象的。需要注意的是在多处理器系统中使用指针使用通知时,如果不同的线程可能会引用复制或销毁同一个对象,同步代码将被要求进行必要的通知线程安全的。相反,在一个GC系统中,每个处理器可以随时更改参考变量,而不必与任何其他处理器同步其动作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top