【发布时间】:2011-08-07 22:57:33
【问题描述】:
在 x86/x86-64 上写入比特流的最快方法是什么? (码字
通过编写比特流,我指的是将可变比特长度符号连接到连续内存缓冲区的过程。
目前我有一个标准容器,其中有一个 32 位中间缓冲区可以写入
void write_bits(SomeContainer<unsigned int>& dst,unsigned int& buffer, unsigned int& bits_left_in_buffer,int codeword, short bits_to_write){
if(bits_to_write < bits_left_in_buffer){
buffer|= codeword << (32-bits_left_in_buffer);
bits_left_in_buffer -= bits_to_write;
}else{
unsigned int full_bits = bits_to_write - bits_left_in_buffer;
unsigned int towrite = buffer|(codeword<<(32-bits_left_in_buffer));
buffer= full_bits ? (codeword >> bits_left_in_buffer) : 0;
dst.push_back(towrite);
bits_left_in_buffer = 32-full_bits;
}
}
有谁知道任何不错的优化、快速说明或其他可能有用的信息?
干杯,
【问题讨论】:
-
您能用文字解释一下这段代码的目的是什么吗? (即,“写比特流”是什么意思?)
-
@Oli Charlesworth,比特流是一系列不同比特长度的整数,没有填充。通常,整数已被编码,以便它们的长度是隐含的,例如霍夫曼编码,因此读者可以在没有任何其他信息的情况下提取原始值。
-
(1) 这些位串是可变长度的吗?这些位串的长度是否有任何可预测性? (2) 您是否尝试过在 x86-64 上使用 64 位整数?
-
High-speed software implementation of Huffman coding Kawahara, M.;邱奕仁;伯杰,T.
标签: c++ optimization x86 bit-manipulation