据我了解,BigInts通常在大多数编程语言中实现为包含数字的数组,例如:当添加其中两个数字时,每个数字都会像我们在学校学到的那样被一个接一个地添加,例如:
246
816
* *
----
1062
其中 * 标记存在溢出。我在学校是这样学的,我实现的所有 BigInt 添加函数的工作都与上面的示例类似。
所以我们都知道我们的处理器只能本机管理从 0 到2^32
/ 2^64
.
这意味着大多数脚本语言为了达到高级水平并提供大整数算术,必须实现/使用 BigInt 库,该库将整数作为数组使用,如上所述。
但这当然意味着它们会比处理器慢得多。
所以我问自己的是:
它的工作方式与任何其他 BigInt 库类似,只是速度更快且级别更低:处理器从缓存/RAM 中获取一位数字,将其相加,然后再次将结果写回。
对我来说似乎是个好主意,那么为什么没有类似的东西呢?
有太多的问题需要处理器处理大量不属于它的工作的事情。
假设处理器确实具有该功能。我们可以设计一个系统,在该系统中我们知道给定的 BigInt 使用了多少字节 - 只需使用与大多数字符串库相同的原理并记录长度即可。
但是,如果 BigInt 运算的结果超出了保留的空间量,会发生什么情况呢?
有两种选择:
- 它会环绕在它所拥有的空间内
或者
- 它将使用更多内存。
问题是,如果它做到了 1),那么它就没用了 - 你必须事先知道需要多少空间,这就是你想要使用 BigInt 的部分原因 - 所以你不受这些限制事物。
如果它执行了 2),那么它必须以某种方式分配该内存。跨操作系统的内存分配方式并不相同,但即使是这样,它仍然必须将所有指针更新为旧值。它如何知道什么是指向该值的指针,什么是包含与所讨论的内存地址相同的值的简单整数值?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)