我试图实现bigInt库。我一直在检查其他图书馆一样GMP,ttmaht或libtommath但其中的任何履行项目的要求(因为许可证,因为他们只使用堆栈等)在不同大小的堆中定义结构
我会按照libtommath的方法(真的有据可查并用C语言编写),但我希望所有内容都保存在堆中。 libtommath在像这样的结构中实现bigInt:
typedef struct {
int used, alloc, sign;
mp_digit *dp;
} mp_int;
正如你所看到的,它具有访问值的间接性。 (mp_digit是大整数的数字)。我想脱离间接寻址,所以在堆中有一些类似的结构,最后一个元素是一个mp_digit [],其中mp_int的每个实例的大小可以不同。我可以使用void *和malloc()知道第一个X位置是int的信息(使用,分配,符号等),然后访问mp_digit []知道偏移量但我不喜欢这个想法。我想知道哪种方法更好。
我发现了其他类似的问题,如this one或this one,但他们并没有全部存储在堆中,所以我的技术有点棘手/不同。
谢谢
请选择一种语言。 – juanchopanza
将'mp_digit * dp;'改为'std :: vector dp;'remove'used''' alloc' –
作为定义和使用这种结构的示例,您可以查看['LOGPALETTE'](https:// msdn.microsoft.com/en-us/library/windows/desktop/dd145040(v=vs.85).aspx)([一些使用示例](https://stackoverflow.com/questions/45319996/how-to-构造-A-图片处理对象-从-A-设备从属HBITMAP/45337644#45337644))。基本上你只是分配缓冲区保持结构本身立即跟随的项目数组。 – VTT