gpt4 book ai didi

c - 找出当前平台上最大的原生整数类型

转载 作者:太空狗 更新时间:2023-10-29 16:44:41 25 4
gpt4 key购买 nike

我遇到的问题是创建一种大型整数库。我想让它既跨平台又尽可能快。这意味着我应该尝试使用系统本身支持的尽可能大的数据类型进行数学运算。

我实际上并不想知道我是为 32 位系统还是 64 位系统编译;我所需要的只是一种方法来创建 64 位或 32 位或基于最大可用整数的任何位整数。我将使用 sizeof 来根据它的不同表现不同。

以下是一些可能的解决方案及其问题:

使用 sizeof(void*):这给出了指向内存的指针的大小。有可能(虽然不太可能)系统可能具有比它能够进行数学计算的内存更大的指针,反之亦然。

总是使用长:虽然在多个平台上长整数确实是 4 字节或 8 字节,具体取决于体系结构(我的系统就是这样的一个例子),但一些编译器甚至在 64 位系统上也将长整数实现为 4 字节。

始终使用 long long:在许多 32 位系统上,这是一个 64 位整数,可能效率不高(尽管可能比我正在编写的任何代码都更有效率)。真正的问题是某些架构可能根本不支持它(例如为我的 mp3 播放器供电的架构)。

要强调的是,我的代码不关心整数的实际大小,一旦它被选择(它依赖于 sizeof() 来处理大小重要的任何事情)。我只希望它选择能使我的代码最高效的整数类型。

最佳答案

如果您真的想要原生大小的类型,我会使用 size_tptrdiff_tintptr_tuintptr_t。在任何非病态系统上,这些都将是原生字大小。

另一方面,始终使用固定大小在简单性方面肯定有好处,在这种情况下我只会使用 int32_tuint32_t。我说它更简单的原因是你通常最终需要知道诸如“适合类型的 10 的最大幂”(用于十进制转换)和其他不能轻易表达为类型常量表达式的常量你用过。如果你只是选择一个固定的位数,你也可以固定方便的常量(比如我的例子中的 1000000000)。当然,这样做会牺牲一些高端系统的性能。您可以采取相反的方法并使用更大的固定大小(64 位),这在高端系统上是最佳的,并假设 32 位机器上的 64 位算法的编译器代码至少与您的 bignum 代码处理 2 个 32 位字,在这种情况下它仍然是最佳的。

关于c - 找出当前平台上最大的原生整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com