我目前正在研究在纯 C 中实现高效 BitStream 的各种可能策略。我需要它来实现各种基于位的压缩算法。但是,我找不到太多关于该主题的文献,而且似乎也找不到很多好的例子。
这是我正在寻找的:
- 主要是基于宏的实现以避免函数调用
- 向/从 BitStream 读取/写入“n”个比特的函数。
- 读取/写入特定位数(如 5 位)的功能,在通用位上进行了优化。
我想知道以下几点:
- 应在 BitStream 中维护的变量。可以有一个 BYTE 指针、一个字节位置、当前字节中的位索引、当前字节中剩余的位数等。
- 如何减少要维护的变量数量。我们拥有的变量越多,我们需要更新的变量就越多。
- 如何在单个读/写操作的上下文中使用少量中间/临时变量。
- 是否应该在 BYTE 级别或 UINT16 级别或 UINT32 级别进行操作。也许将位累积到 UINT32 并在它已满时写入字节(或在写入完成时,使用刷新操作)会比按字节执行所有操作要快得多。
- 我们怎样才能尽可能地避免循环。理想情况下,我们应该不惜一切代价避免循环写入比特流的位数。
这可能看起来有点矫枉过正,但是当涉及到压缩的其余代码已经被极度优化时,看起来 BitStream 部分只是破坏了整个事情。例如,在图像压缩代码中使用 SIMD CPU 指令来优化部分编码过程的汇编例程并不罕见,但最后一步是写入 BitStream。
想法,参考,任何人?谢谢!