![]() |
1
23
在 一般的 在这种情况下,后增量将导致复制,而预增量不会。当然,这将在大量情况下被优化掉,在没有优化的情况下,复制操作可以忽略不计(例如,对于内置类型)。 下面是一个小例子,展示了后增量的潜在低效性。
优化生成的结果(由于rvo,实际删除了增量后情况下的第二个复制操作):
一般来说,如果您不需要后增量的语义,为什么要冒险进行不必要的复制呢?
当然,最好记住,自定义运算符++()-无论是前变式还是后变式-都可以自由返回它想要的任何内容(甚至可以做它想要的任何操作),并且我可以想象有相当多的运算符不遵循通常的规则。偶尔我会遇到一些返回的实现。”
|
![]() |
2
8
你不会看到整数有什么不同。您需要使用迭代器,或者在post和prefix确实有不同之处的地方使用迭代器。你需要改变所有的优化 在 ,不要关机! |
![]() |
3
5
我喜欢遵循“说你的意思”的规则。
|
![]() |
4
4
几点:
如果您想显示区别,最简单的选择就是简单地导入两个操作符,并指出一个需要额外的副本,另一个不需要。 |
![]() |
5
0
这段代码及其注释应该说明两者之间的区别。
您可以看到后缀有一个额外的步骤(步骤1),它涉及创建一个 复制 对象的。这对内存消耗和运行时都有影响。 那 为什么前缀比后缀更有效 非碱性的 类型。
取决于
|
![]() |
6
0
作为对Mihail的回应,这是一个更为便携的版本HIS代码:
外环可以让我调整时间,在我的平台上找到合适的东西。 我不再使用VC++了,所以我(在Windows上)用以下代码编译它:
然后我交替进行:
和
两个病例的定时结果大致相同。有时一个版本的速度会高达20%,有时另一个版本的速度会更快。我猜这是由于系统上运行的其他进程造成的。 |
![]() |
7
0
尝试使用while或使用返回值执行某些操作,例如:
使用/o2或/ox与vs 2005一起编译,在我的桌面和笔记本电脑上尝试过。 稳定地在笔记本电脑上得到一些东西,在桌面上的数字是有点不同(但速率是相同的):
XX意味着数字不同,例如813和640——仍然是20%左右的速度。 还有一点-如果将“d+=”替换为“d=”,您将看到很好的优化技巧:
不过,这很具体。但毕竟,我看不出有任何理由改变我的想法,认为没有什么区别:) |
![]() |
8
0
也许您可以通过编写两个版本的x86汇编指令来显示理论上的差异?正如许多人之前指出的,编译器总是会自己决定如何最好地编译/组装程序。 如果这个例子是针对不熟悉x86指令集的学生的,那么您可以考虑使用mips32指令集——出于一些奇怪的原因,许多人认为它比x86程序集更容易理解。 |
![]() |
9
-4
好的,所有这些前缀/后缀“优化”只是…一些大误会。 i++返回其原始副本,因此需要复制该值的主要思想。 这对于某些非有效的迭代器实现可能是正确的。但是,在99%的情况下,即使使用STL迭代器也没有区别,因为编译器知道如何优化它,而实际迭代器只是看起来像类的指针。当然,对于像指针上的整数这样的基元类型没有区别。 所以…算了吧。 编辑:清除 正如我之前提到的, 大部分 STL迭代器类只是 指针 用具有所有成员函数的类包装 内联 允许优化这些无关的拷贝。 是的,如果您有自己的没有内联成员函数的迭代器,那么它可以 工作慢一点。但是,您应该理解编译器做什么,不做什么。 作为一个小小的证明,以这个代码为例:
把它编译成汇编并比较sum1和sum2、sum3和sum4…
我只能告诉你…GCC给出的代码与
|
![]() |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
![]() |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
![]() |
Daniel · C#轻松存储快速访问的大型位矩阵 7 年前 |
|
halbe · 优化音频DSP程序的numpy计算 7 年前 |
![]() |
Afsara · 是否有任何方法不能优化我们的应用程序? 7 年前 |