我遇到的问题是创建一种大整数库。我想让它既跨平台又尽可能快。这意味着我应该尝试使用系统本机支持的大数据类型进行数学运算。
我实际上并不想知道我是为 32 位还是 64 位系统编译;我所需要的只是一种根据可用的最大值创建 64 位或 32 位或任何位整数的方法。我将使用 sizeof 来表现不同,具体取决于那是什么。
以下是一些可能的解决方案及其问题:
使用 sizeof(void*):这给出了指向内存的指针的大小。系统有可能(尽管不太可能)具有比它能够进行数学运算更大的指向内存的指针,反之亦然。
始终使用 long:虽然在多个平台上,长整数确实是 4 字节或 8 字节,具体取决于体系结构(我的系统就是这样一个例子),但即使在 64 位系统上,一些编译器也将长整数实现为 4 字节。
始终使用 long long:在许多 32 位系统上,这是一个 64 位整数,它可能效率不高(尽管可能比我编写的任何代码都更有效)。真正的问题是,某些架构可能根本不支持它(例如为我的 mp3 播放器供电的架构)。
需要强调的是,我的代码不关心整数的实际大小,一旦它被选择(它依赖于 sizeof() 来处理大小重要的任何事情)。我只希望它选择能使我的代码最有效的整数类型。