![]() |
1
3
对于记录gcc,编译时特别禁用了优化(
无临时变量
这里,返回值
带临时变量
这里,返回值
因此,如果我们进一步假设处理器在为此生成微码时没有进行任何“优化”,那么没有临时代码的版本应该更快一些时钟周期。它不会快得多,因为即使具有临时版本的版本涉及堆栈推送,当比较指令在单词后立即执行时,堆栈值几乎肯定仍将在处理器的一级缓存中,因此不会出现以及到RAM的行程。
当然,只要打开任何优化级别,代码就会变得相同,甚至
编辑:
关于您的硬件工程师朋友的进一步信息,我看不到如何访问一级缓存中的值。
更快
而不是直接访问寄存器。我可以看到它就在
以同样的速度
如果这个值从未离开管道,但我看不到它是
更快
尤其是因为它还必须执行
|
![]() |
2
13
将[b]转换为[a]所需的“优化”是如此微不足道(尤其是如果
唯一的方法是让编译器为这两个代码位生成一个程序集源代码列表,然后比较它们。 |
![]() |
3
4
执行摘要
旁注:[B]可能有不同的含义。
假设函数返回int:
取决于编译器
取决于硬件
假设在现代x86/x64体系结构上使用现代编译器:
在典型的编译器上,差异至多是微乎其微的。
比较:不在第一级缓存中的单个内存访问的周期成本(大约:从第二级开始100个周期,从主级开始1000个周期,从磁盘开始数十万个周期)
…甚至不存在
|
![]() |
4
2
它们很可能都是一样的。在任何情况下,该int都将存储在寄存器中。 |
![]() |
5
0
这实际上取决于编译器是如何构建的。但我认为在大多数情况下,A会更快。原因如下: 在B语言中,编译器可能不会费心去发现是否再次使用t,因此它将被迫保留if语句之后的值。这可能意味着将它推到堆栈上。 |
![]() |
6
-1
因为它不执行变量赋值,所以可能只快一点点。我们讨论的差异太小,无法衡量。 |
![]() |
Sweepy Dodo · JSON lite的格式化 6 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 7 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 8 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 11 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 11 月前 |
![]() |
Mohan · 是否有一种更快的方法来编写代码,从1:N中提取许多随机样本? 11 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 11 月前 |