计算机架构与浮点运算深度解析
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 +
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



