Condense 3浮动到uint64_t

Vea*_*cus 1 c++ bit-manipulation

我正在开发一个程序,它可以生成很多类的实例(数百万).这个课很简单,只有3个花车.

现在这些浮点数可以存在的范围存在于0和1(颜色值)之间,并且通常它们是非常简单的值(1,0.5,0.25,0).为了节省内存,我认为制作这些类的池会最好用,因为它们只用于只读环境,所以它们可以在多个地方共享指针样式.

我认为将这些对象存储在unordered_map中会起作用,并且会使用uint64_t的键值.键的值将是每个浮点的高21位.

是否有一种简洁的方法来获取每个浮点数的高21位并将它们全部放在一个64位整数中?

或者这只是一个愚蠢的方式来解决这个问题?我不确定这是否有效或有利,但如果它有效,我将把它扩展到程序中的其他类(位置值,形状等可能最终共享值)

Sky*_*leh 6

您应该为每个颜色值(24位颜色)使用一个字节.这将使你的每个类占用空间的1/4(填充1/3).这是最高质量的格式,无论如何都会呈现屏幕的每个像素.

编辑:如果您想节省更多空间,可以让类以RGB565格式存储16位颜色.如果你需要进行颜色查找,那么你可以使用它会产生的短路作为关键.


Lig*_*ica 5

或者这只是一个愚蠢的方式来解决这个问题?

是.

把事情简单化.