为什么我的处理器没有内置 BigInt 支持?

2024-02-15

据我了解,BigInts通常在大多数编程语言中实现为包含数字的数组,例如:当添加其中两个数字时,每个数字都会像我们在学校学到的那样被一个接一个地添加,例如:

 246
 816
 * *
----
1062

其中 * 标记存在溢出。我在学校是这样学的,我实现的所有 BigInt 添加函数的工作都与上面的示例类似。

所以我们都知道我们的处理器只能本机管理从 0 到2^32 / 2^64.

这意味着大多数脚本语言为了达到高级水平并提供大整数算术,必须实现/使用 BigInt 库,该库将整数作为数组使用,如上所述。 但这当然意味着它们会比处理器慢得多。

所以我问自己的是:

  • 为什么我的处理器没有内置 BigInt 函数?

它的工作方式与任何其他 BigInt 库类似,只是速度更快且级别更低:处理器从缓存/RAM 中获取一位数字,将其相加,然后再次将结果写回。

对我来说似乎是个好主意,那么为什么没有类似的东西呢?


有太多的问题需要处理器处理大量不属于它的工作的事情。

假设处理器确实具有该功能。我们可以设计一个系统,在该系统中我们知道给定的 BigInt 使用了多少字节 - 只需使用与大多数字符串库相同的原理并记录长度即可。

但是,如果 BigInt 运算的结果超出了保留的空间量,会发生什么情况呢?

有两种选择:

  1. 它会环绕在它所拥有的空间内 或者
  2. 它将使用更多内存。

问题是,如果它做到了 1),那么它就没用了 - 你必须事先知道需要多少空间,这就是你想要使用 BigInt 的部分原因 - 所以你不受这些限制事物。

如果它执行了 2),那么它必须以某种方式分配该内存。跨操作系统的内存分配方式并不相同,但即使是这样,它仍然必须将所有指针更新为旧值。它如何知道什么是指向该值的指针,什么是包含与所讨论的内存地址相同的值的简单整数值?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的处理器没有内置 BigInt 支持? 的相关文章

  • GPU - 系统内存映射

    如何映射系统内存 RAM 以供 GPU 访问 我很清楚虚拟内存如何为 cpu 工作 但不确定当 GPU 访问 GPU 映射的系统内存 主机 时 虚拟内存如何工作 基本上与数据如何从系统内存复制到主机内存以及反之亦然有关 您能提供有参考文章支
  • Java 线程运行在哪个处理器上?

    有没有办法使用 Java 本机线程找出您的线程正在哪个处理器上运行 无论是在单个系统上还是在多个系统上 如果没有 有什么图书馆可以提供帮助吗 JVM 的线程调度程序是特定于 JVM 的 因此不存在 通用 解决方案 据我所知 没有任何现成可用
  • Java 如何反转 BigInteger?

    我需要反转BigInteger 假设我有BigInteger x 我需要计算x modPow new BigInteger 1 p 我收到以下错误 java lang ArithmeticException BigInteger not i
  • 除了提供必要的保证之外,硬件内存屏障是否还能使原子操作的可见性更快?

    TL DR 在生产者 消费者队列中 放置不必要的 从 C 内存模型的角度来看 内存栅栏或不必要的强内存顺序是否有意义 以牺牲可能更差的吞吐量为代价获得更好的延迟 C 内存模型在硬件上执行 通过为更强的内存顺序设置某种内存栅栏 而不是在较弱的
  • 文件支持的内存映射的 CPU 缓存行为/策略?

    有谁知道哪种类型的CPU缓存行为或策略 例如不可缓存的写组合 被分配给内存映射文件支持现代 x86 系统上的区域 有什么方法可以检测是哪种情况 并可能覆盖默认行为吗 Windows 和 Linux 是人们感兴趣的主要操作系统 编者注 这个问
  • 如何在SML中使用IntInf或LargeInt?

    我想通过此链接中的 pow 等函数在 SML 中执行大整数计算 http www standardml org Basis int inf html IntInf STR SPEC http www standardml org Basis
  • .csproj 的平台特定 ItemGroup 适用于程序集引用,但不适用于内容包含?

    由于我们有三个显式 x86 和 x64 版本的程序集 因此我编辑了相应的 csproj 文件以使用 例如 如下所示的块
  • 驱动程序如何使用 MONITOR 指令(_mm_monitor 内在函数)?

    我正在探索使用MONITOR指令 或等效的内在指令 mm monitor 尽管我找到了描述它们的文献 但我找不到任何关于如何使用它的具体示例 样本 任何人都可以分享如何在驱动程序中使用该指令 内在的示例吗 本质上 我想用它来观察内存范围 T
  • 为什么64位cpu不存在高端内存?

    当我试图了解 32 位 cpu 和 Linux 的高内存问题时 为什么没有高内存问题 https en wikipedia org wiki High memory对于64位CPU 特别是 虚拟内存分为内核空间和用户空间的划分是如何改变的
  • “机器硬件”和“硬件平台”的区别

    我的 Linux 机器报告 uname a 输出如下 root tom i386 uname a Linux tom 2 6 9 89 ELsmp 1 SMP Mon Apr 20 10 34 33 EDT 2009 i686 i686 i
  • 为什么无法一步读取未对齐的单词?

    鉴于 CPU 的字大小允许它寻址内存中的每个字节 鉴于通过PAE http en wikipedia org wiki Physical address extensionCPU 甚至可以使用比字大小更多的位来进行寻址 CPU 无法一步读取
  • BigInteger 使用了多少空间?

    BigInteger 对象通常使用多少字节的内存 BigInteger 内部使用int 来表示您使用的巨大数字 因此它确实取决于您存储在其中的数字的大小 The int 如果当前数量不能动态适应 则会增长 要获取您的字节数BigIntege
  • 现代缓存中的方式预测

    我们知道 就缓存命中时间而言 直接映射缓存优于集合关联缓存 因为不涉及特定标签的搜索 另一方面 组关联缓存通常比直接映射缓存具有更好的命中率 我读到 现代处理器试图通过使用一种称为路径预测的技术来结合两者的优点 他们预测给定集合中最有可能发
  • 使用 BigInteger 进行 Karatsuba 乘法

    我首先使用 long 编写了 Karasuba 算法的代码 我认为它工作得很好 使用相同的逻辑 我将代码转换为 BigInteger 但由于某些原因 它给出了 StackOverflowError 我不明白为什么 请帮忙 EDIT1 长时间
  • CPU缓存:两个地址之间的距离是否需要小于8字节才能具有缓存优势?

    这似乎是一个奇怪的问题 假设缓存行的大小为 64 字节 此外 假设 L1 L2 L3 具有相同的缓存行大小 this https stackoverflow com a 15333156 8385554帖子说英特尔酷睿 i7 就是这种情况
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 当我打开在 Xcode 4 中创建的 Google 地图项目时,Xcode 5 会警告我的架构设置

    我刚刚更新到新发布的 Xcode 5 我正在开发一个使用 Google 地图 iOS SDK 的 iOS 应用程序 当我在 Xcode 4 中开发时 我改变了我的Architectures在我的项目设置中进行设置 按照 Google 的步骤
  • CPU是如何做减法的?

    我有一些基本的疑问 但每次我坐下来尝试面试问题时 这些问题和我的疑问就会出现 假设 A 5 B 2 假设A和B都是4字节 那么CPU是怎么做的呢 A B添加 我知道 A 的符号位 MSB 为 0 表示正值 B 的符号位为 1 表示负整数 现
  • 我们如何计算这段代码片段中缓存的读取/未命中次数?

    鉴于我目前正在学习的这本教科书中的代码片段 Randal E Bryant David R O Hallaron 计算机系统 程序员的视角 第 3 版 2016 年 Pearson 全球版 因此本书的练习可能是错误的 for i 31 i
  • 缓存一致性是否始终可以防止读取过时的值?失效队列允许吗?

    在 MESI 协议中 仅当将缓存行保持在独占 修改状态时才写入缓存行 要获取独占状态 您可以向持有同一高速缓存行的所有核心发送无效请求 但是是否存在一种微架构 其中某些内核会在实际使缓存线无效之前做出确认响应 如果确实如此 那不是违反了缓存

随机推荐