【发布时间】:2012-09-24 02:07:44
【问题描述】:
显然是在阅读了旧标题之后
为什么会出现
is ++i fster than i+=1这样的问题
人们懒得彻底阅读问题本身。
问题不是关于人们提出这个问题的原因!这是关于为什么编译器会在++i 和i+=1 之间产生差异,并且是否存在任何可能的情况。虽然我很欣赏你所有诙谐而深刻的 cmets,但我的问题不是关于它。
好吧,好吧,让我试着换个方式问这个问题,我希望我的英语足够好,这次我可以表达自己而不会被误解,所以请阅读。假设有人在一本 10 年前的书中读到:
使用 ++i 而不是 i=i+1 会给您带来性能优势。
我并不热衷于这个具体的示例,而是或多或少地泛泛而谈。
显然,作者在写这本书时,对他来说是有道理的,而不仅仅是他编造的。我们知道,现代编译器并不关心你使用++i、i+=1 还是i = i + 1,代码会被优化并且我们将有相同的asm 输出。
这似乎很合乎逻辑:如果两个操作做同样的事情,并且有相同的结果,那么没有理由将++i 编译成一个东西,将i+=1 编译成另一个东西。
但是自从书的作者写出来,他就看到了不同!这意味着某些编译器实际上会为这两行产生不同的输出。这意味着制作编译器的人有一些理由将++i 和i+=1 区别对待。 我的问题是他们为什么会这样做?
仅仅是因为当时很难/不可能使编译器足够先进以执行此类优化吗?或者也许在某些非常特定的平台/硬件/在某些特殊情况下,区分++i 和i+=1 以及其他类似的东西实际上是有意义的?或者它可能取决于变量类型?还是编译器开发人员只是懒惰?
【问题讨论】:
-
嗯,这真的取决于
i的类型。 -
我认为这属于元数据。
-
为什么还会存在诸如“i++ 是否比 i=i+1 快”之类的问题?
-
因为人不是生来就有知识的,因为人是好奇的。
-
也许它们的存在是因为你可以为这样一个愚蠢的问题获得 50 次投票...
标签: c++ c performance optimization