【问题标题】:Condense 3 floats to a uint64_t将 3 个浮点数压缩为 uint64_t
【发布时间】:2011-06-10 19:08:02
【问题描述】:

我正在开发一个生成大量类实例(数百万)的程序。这个类非常简单,它只包含 3 个浮点数。

现在这些浮点数可以存在的范围介于 0 和 1(颜色值)之间,并且通常它们是非常简单的值(1、0.5、0.25、0)。为了节省内存,我认为将这些类组成一个池效果最好,因为它们只在只读情况下使用,因此可以在多个地方共享指针样式。

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

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

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

【问题讨论】:

  • 3 个浮点数在大多数平台上占用 12 个字节。算一算。除非您在嵌入式平台上工作,否则可能不值得。

标签: c++ bit-manipulation


【解决方案1】:

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

编辑: 如果您想节省更多空间,您可以让这些类以 RGB565 格式存储 16 位颜色。然后,如果您需要进行颜色查找,您可以使用这将产生的短作为键。

【讨论】:

  • 这似乎比我做的要容易得多!
【解决方案2】:

或者这只是一种愚蠢的做法?

是的。

保持简单。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2015-07-12
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多