32、计算机架构与浮点运算深度解析

计算机架构与浮点运算深度解析

1. 64 位架构的争议

在 64 位架构的应用中,存在着一些争议。x64 CPU 虽然能访问外部 RAM 的 48 位地址,但存储指针(包括缓存内存)却需要两倍的内存。例如,在拥有 64 位寄存器但只有 2GB RAM 的计算机上,指针的有效位数通常不超过 32 位,然而每次使用指针都要占用 64 位,这不仅使数据结构的大小翻倍,还会占用大量缓存,增加成本。

为了应对这一问题,一些开发者采取了不同的策略。像 Donald Knuth 就建议使用数组代替指针,并编写复杂的宏来模拟指针的使用。还有一些人会创建自己的内存分配器,例如 CryptoMiniSat 程序,它很少使用超过 4GB 的 RAM,但大量使用指针,在 32 位架构上比 64 位架构更节省内存。其作者通过编写自己的分配器(在 clauseallocator.(h|cpp) 文件中),使用 32 位标识符来访问分配的内存,而不是 64 位指针。

2. SIMD 处理浮点数

在 x86 兼容处理器中,即使添加了 SIMD 扩展,FPU 仍然保留。不过,SIMD 扩展(SSE2)为处理浮点数提供了更便捷的方式,且数字格式仍遵循 IEEE 754 标准。现代编译器(包括为 x86 - 64 生成代码的编译器)通常会使用 SIMD 指令而非 FPU 指令。

2.1 简单示例

以下是一个简单的 C 语言示例:

#include <stdio.h>
double f (double a, double b)
{
    return a/3.14 +
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值