|
1
51
x64处理器包含64位通用寄存器,它们可以使用这些寄存器在一条指令中计算64位整数的运算。32位处理器没有这个功能。这与您的程序特别相关,因为它大量使用
例如,在x64汇编中,要添加存储在寄存器中的两个64位整数,只需执行以下操作:
要在32位x86处理器上执行相同的操作,必须使用两个寄存器,并在第二个操作中手动使用第一个操作的进位:
对于.NET应用程序,64位JIT编译器似乎执行了更积极的优化,从而提高了总体性能。
关于数组迭代的观点,C#编译器足够聪明,可以识别
|
|
|
2
5
|
|
|
3
2
不确定“为什么”,但我会确保在计时器循环之外至少调用一次“方法”,这样就不会计算第一次的抖动(因为这在我看来像是C。 |
|
|
4
1
我假设您使用的是x86技术。在汇编程序中执行循环需要什么?
对于您需要的64位长 32位上的寄存器,我们只有四个寄存器,所以很有可能所有变量都不能存储在寄存器中,但必须存储在堆栈之类的中间存储器中。仅此一项就将大大降低访问速度。 增加数字: 添加必须是两次;第一次不带进位,第二次带进位。64位可以在一个周期内完成。 对于每1个周期的64位var,32位需要两个周期才能将长整数加载/卸载到内存中。 将失去相当大的速度。一个数量级的速度增益是GPU仍然喜欢浮点(32位)而不是双精度(64位)的原因。 |
|
5
0
正如其他人所说,在32位机器上执行64位算术需要一些额外的操作,如果执行乘法或除法,则需要更多的操作。 回到您对迭代器与简单for循环的关注,迭代器可以有相当复杂的定义,只有内联和编译器优化能够用等效的简单形式替换它们,迭代器的速度才会更快。这实际上取决于迭代器的类型和底层容器实现。判断其优化是否合理的最简单方法是检查生成的汇编代码。另一种方法是将它放入一个长时间运行的循环中,暂停它,然后查看堆栈以了解它在做什么。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |