假设C中的整数是由硬件规范处理还是在软件中处理?

时间:2009-07-26 12:59:51

标签: c math gcc standards gmp

C中的整数是假设是由硬件规范处理还是用软件处理?

通过整数,我指的是原语“int”

基本思想是,如果C中的整数不依赖于硬件,那么让gcc实现不同的整数处理程序会违反标准。这样你可以拥有传统的32位int处理程序,然后你也可以拥有256位整数的处理程序,甚至可能是动态大小的整数。

我确实知道long和long long,但我不确定它们是否独立于所提供的硬件,我只想指定构建工具链时要使用的“int”处理程序的大小/类型

我也理解这样做的危险(因为使用32位整数编译器构建256位整数会很糟糕!),但是对于那些需要类似gmp库的代码,我认为它会产生代码可读性好多了。兼容性是相同的,但依赖性将在编译器而不是代码本身。

疯狂的想法,我知道......但回到最初的问题:

C中的整数是假设是由硬件规范处理还是用软件处理?

3 个答案:

答案 0 :(得分:5)

标准说

  

“普通”int对象具有执行环境体系结构建议的自然大小(大到足以包含INT_MININT_MAX范围内的任何值。标题<limits.h>)。

<limits.h>约束INT_MIN的描述最多为-32767且INT_MAX至少为32767.因此,如果您的硬件有12位字,则必须使用两个单词作为int

答案 1 :(得分:2)

是的,int将以原生大小处理。所以sizeof(int)可能会给你一个不同的值,具体取决于你编译和运行的系统。 int的所有数学运算都将由CPU的本机指令处理 - 比在软件中执行速度快得多。如果你需要int256,你需要自己编写。而且我确定那里有任意大小的整数库。

答案 2 :(得分:1)

实现256位整数的C实现完全符合C标准(但请注意,它必须至少长整数int和long long int。)

然而,由这样的编译器生成的代码通常与同一平台上的其他编译器生成的代码链接兼容,这是在实践中没有完成的一个原因。