【发布时间】:2021-08-19 23:44:34
【问题描述】:
假设您有一个存储自然数的数据结构(尽管挑战与实数相同)。您希望数据结构消耗所需的最少内存,但您确实希望支持较大的数值。理想的数据结构会将每个值存储在内存中,该区域的大小与该值相匹配。
我的问题:C++ 是否提供任何工具来应对这一挑战?我可以尝试通过分配我自己的内存缓冲区并将指针从我的数据结构中保存到缓冲区中来尝试制定“C 方式”解决方案,但是现在我保留指针而不是数字,这并没有太大的改进,就内存大小而言。
我发现这是一个具有挑战性的问题,因为 C++ 中要求为每个标识符保留特定类型。我会感谢你的 cmets。
【问题讨论】:
-
跟踪实际类型以及指针偏移量的任何开销都可能超过使用足够大的整数类型(即
unsigned long long)所付出的代价。 -
C++ 不包括它作为标准 C++ 库的一部分。您必须创建自己的,或使用众多 C++ bigint 实现之一或 Boost multiprecision。
-
是否需要存储大于单个机器字容量的值?
-
如果您知道数字大小的分布,那么您可以设计一种压缩算法来有效地存储一系列这些数字。权衡涉及读回数字的速度与最低存储要求。
-
一个模板可以让你定义类型是什么,一个从参数推导出类型的函数(如std::make_pair)会使其相当透明。但是请记住,比较结构会更加困难,因为它们不是兼容的类型 - 您必须进行特殊的成员比较。
标签: c++ bigint data-representation