C创建一个新的int类型

C创建一个新的int类型,c,gcc,compiler-construction,C,Gcc,Compiler Construction,我知道编译器在64位体系结构上支持一些类型,如\uuu int128\u t。它基本上在2个寄存器中存储一个数字。现在,有没有办法在64位机器上创建类似于\uuuu int256\u t的东西 基本上,我想知道是否有一种方法可以扩展编译器以支持一种数据类型,例如在4个寄存器上存储一个数字,并以某种方式重载+运算符以正确地添加它们。不是C语言。数字数据类型在编译器中实现,不能由应用程序扩展 这在C++中是可行的,虽然对象通常会被存储在堆栈上,而不是在寄存器中。您可能需要为编译器配置一个新的目标。

我知道编译器在64位体系结构上支持一些类型,如
\uuu int128\u t
。它基本上在2个寄存器中存储一个数字。现在,有没有办法在64位机器上创建类似于
\uuuu int256\u t
的东西


基本上,我想知道是否有一种方法可以扩展编译器以支持一种数据类型,例如在4个寄存器上存储一个数字,并以某种方式重载+运算符以正确地添加它们。

不是C语言。数字数据类型在编译器中实现,不能由应用程序扩展


这在C++中是可行的,虽然对象通常会被存储在堆栈上,而不是在寄存器中。

您可能需要为编译器配置一个新的目标。 如果考虑的话,尝试修补主干(未来的GCC 5.0,将于2015年春季发布),因为它对所谓的宽整数有更好的支持(参见其
GCC/wide-int.h
文件)。您可能还需要修补
gcc/config/i386/
,尤其是一些
*.md
-机器描述-文件

当心,这是一个很大的工作(数月)。你就不能用像这样的图书馆吗

顺便说一句,你需要定义一个新的和新的太

我相信这是不值得的努力。一项更简单的工作(仍需数周的努力)可能是在GCC中定制一些优化过程,使用以帮助使用GMPlib(或您的
struct myint256\u t
),可能通过其他内置程序等

如果您只是想使用一些编译器来实现这一点,而不关心性能,那么可以使用一些更简单的编译器,如或

一个更简单的项目是将带有256位整数的C语言翻译成更普通的C代码(将
int256_t
翻译成
struct myint256_t
等)。您还可以研究具有内置支持的语言,如及其实现。请注意,高效的bignum算法在算法上非常复杂


请注意,在(以及一些早期版本的C++)中,您可以重写
操作符+
,以便能够编写
a+b
(其中
a
b
都是复杂的
类或您自己的类的实例)在C语言中,您可能正在寻找类似于库的东西,它允许您拥有任意大小的数字

物理地将它添加到C编译器是可能的,但这将是一项大量的工作,而且大多数感兴趣的人已经使用了GMP或许多类似的库之一


若你们想学习,你们可能会更好地使用它的前端;它们比任何“真正的”C编译器都要好得多。

你到底问什么?你为什么不能用?什么处理器,什么编译器(我猜是GCC,因为你给它加了标签),什么操作系统?什么源代码?请编辑您的问题以改进它!这个问题只是为了提高我对语言和编译器的知识/理解,没有任何实际结果(将原始数据类型存储在4个或更多寄存器上实际上是不切实际的)。所以我从理论的角度要求更多。此外,使用具有4个整数的结构和用于加法/乘法的函数也可以轻松实现这一点。但是,问题是要让我的新类型的行为像一个内置的。你准备好花几个星期或几个月的时间来做这件事吗?@BasileStrynkevitch:我准备花几天的时间来理解如何做。几天的时间不足以理解……另一种方法是使用
\u int128\u t[2]
或2成员结构,但当然所有算术运算符都必须作为函数或宏重新实现。通过在MELT中编码一些特殊的优化过程,可以帮助优化这些宏。。。