gpt4 book ai didi

.net - 为什么 Math.DivRem 如此低效?

转载 作者:行者123 更新时间:2023-12-03 08:29:51 24 4
gpt4 key购买 nike

在我的电脑中,这段代码需要 17 秒(10 亿次):

static void Main(string[] args) {
var sw = new Stopwatch(); sw.Start();
int r;
for (int i = 1; i <= 100000000; i++) {
for (int j = 1; j <= 10; j++) {
MyDivRem (i,j, out r);
}
}
Console.WriteLine(sw.ElapsedMilliseconds);
}

static int MyDivRem(int dividend, int divisor, out int remainder) {
int quotient = dividend / divisor;
remainder = dividend - divisor * quotient;
return quotient;
}

而 Math.DivRem 需要 27 秒。

.NET Reflector给我这个 Math.DivRem 代码:
public static int DivRem(int a, int b, out int result)
{
result = a % b;
return (a / b);
}

国际劳工组织
.method public hidebysig static int32 DivRem(int32 a, int32 b, [out] int32& result) cil managed
{
.maxstack 8
L_0000: ldarg.2
L_0001: ldarg.0
L_0002: ldarg.1
L_0003: rem
L_0004: stind.i4
L_0005: ldarg.0
L_0006: ldarg.1
L_0007: div
L_0008: ret
}

理论上多核的计算机可能会更快,但实际上它首先不需要做两个操作,因为 x86 CPU 返回 商和余数 当他们使用 DIV 或 IDIV ( http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_6/CH06-2.html#HEADING2-451 ) 进行整数除法时!

最佳答案

咕噜噜。这个功能存在的唯一原因就是利用CPU指令来做这个,他们甚至没有这样做!

关于.net - 为什么 Math.DivRem 如此低效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/447282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com