|
1
9
如果存储是您主要关心的问题,我怀疑您需要相当多的20位变量。把它们成对存放怎么样?你可以的 创建一个表示两个这样的变量的类 为了方便地访问变量,您可以重写[]-运算符,这样您就可以编写:
因为您可能希望允许诸如
参考 . 但是,您不能返回对备份字节的直接引用(因为它会弄乱它的相邻值),因此您实际上需要返回一个 备份字节的代理 (这反过来又引用了backing字节)并让代理重载相关的操作符。 事实上,正如@Tony所建议的,您可以将其概括为一个包含N个这样的20位变量的通用容器。 (我自己做过一个专门化的向量,用于有效存储布尔值(作为单个位)。) |
|
|
2
6
也就是说,让我们抓住救命稻草。。。
也有可能,虽然您的值在20位的空间范围内,但在实际使用中,您只有不到64k个不同的值。如果您对数据集有这样的了解,可以创建一个查找表,其中16位数组索引映射到20位值。 |
|
|
3
4
使用类。只要你尊重复制/分配/克隆等。。。STL语义,你不会有任何问题。
|
|
4
3
使用位域。(我真的很惊讶没有人提出这个建议。)
这只适用于结构中元素的相互优化,您可以使用其他数据消除间隙。但效果很好! 如果您真的需要优化一个由20位数字组成的庞大数组,而不需要其他任何东西,那么:
如果愿意,可以添加getter/setter函数使其更漂亮,但是不能获取位字段的地址,而且它们不能参与数组。(当然,您可以拥有
用作:
|
|
|
5
2
std::bitset . 将所有内容存储在位集中,并使用正确的索引(x20)访问数据。 |
|
|
6
1
你不可能得到一个类型正好20位(即使使用位压缩结构),因为它总是与一个字节对齐(最小粒度)。如果必须有20位,唯一的方法就是创建一个位流来处理数据(可以重载以接受索引等) |
|
|
7
1
|
|
|
8
0
据我所知那是不可能的。
为了获得更好的存储密度,可以在一个int64\t值中存储3 int20。 |
|
|
9
0
只是一个想法:使用优化的存储(两个实例5个字节),对于操作,将其转换为32位int,然后再转换回来。 |
|
|
10
0
虽然有很多方法可以做到这一点。 一种可能的方法是使用位抖动将它们存储为一个5字节数组的左右两部分,该数组具有一个要存储/检索的类,该类将所需数组项转换为字节5[]数组中的数组项,并根据需要提取左右半部分。 然而,在大多数硬件上,整数需要字对齐,因此,为了提取整数,还需要进行位旋转,以便正确对齐整数。 我认为增加交换空间并让虚拟内存来处理大数组会更有效(毕竟20比32并不能节省太多!)总是假设你有一个64位操作系统。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |