gpt4 book ai didi

c++ - 比特流优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:08 25 4
gpt4 key购买 nike

我有一个程序可以从比特流中读取大量数据。我这样做的方式看起来效率不高,因为在进行性能测试时,大部分时间都花在了 read 函数上。这是我的阅读功能:

uint32_t bitstream::read(bitstream::size_type n) {
uint32_t a = data[pos / 32];
uint32_t b = data[(pos + n - 1) / 32];
uint32_t shift = pos & 31;

a >>= shift;
b <<= 32 - shift;
uint32_t mask = (uint32_t)(((uint64_t)1 << n) - 1);
uint32_t ret = (a | b) & mask;

pos += n;
return ret;
}

我该如何进一步优化它?我的分析器说这个函数的大部分时间都花在计算 ret 上。

编辑:

关于内部,我是这样设置数据的:

bitstream::bitstream(const std::string &dat) : size( dat.size()*8 ) {
// data has the type std::vector<uint32_t>
data.resize((dat.size() + 3) / 4 + 1);
memcpy(&data[0], dat.c_str(), dat.size());
}

最佳答案

您总是读取相同数量的位数,还是有所不同?

如果是,那么您可以尝试编写一个函数来只读取那么多位:n 为常量可能允许编译器进行一些更积极的优化。 (如果 n 始终为 1,那么您可以编写一个更简单的读取方法)

关于c++ - 比特流优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21775439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com