小编Mag*_*nus的帖子

在现代x86硬件上编写比特流的最快方法

在x86/x86-64上写入比特流的最快方法是什么?(代码字<= 32位)

通过写一个比特流,我指的是将可变比特长度符号连接成一个连续的内存缓冲区的过程.

目前我有一个带有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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道任何好的优化,快速指令或其他可能有用的信息?

干杯,

c++ optimization x86 bit-manipulation

11
推荐指数
2
解决办法
4593
查看次数

从具有默认参数的类模板继承

我创建了一个类似这样的课程.关键是它有一个主模板参数加上一个默认的模板基类.还有一个模板化的复制构造函数......

struct default_base{};

template <typename T, typename TBase=default_base>
class some_class : public TBase{
public:
    some_class(){}
    template <typename U, typename UBase>
    some_class(const some_class<U,UBase>& u){
        T t(U());
    }
};


int main(){
    some_class<int> a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到这个令人讨厌的模糊编译器错误,并且无法发现我的错误...所以我的问题是 - 什么是真的错?我正在使用gcc 4.8.1.

g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\stuff.o" "..\\src\\stuff.cpp" 
..\src\stuff.cpp: In constructor 'some_class<T, TBase>::some_class(const some_class<U,     UBase>&)':
..\src\stuff.cpp:87:10: error: default argument for template parameter for class     enclosing 'T t(U (*)())'
   T t(U());
      ^
..\src\stuff.cpp: In function 'int main()':
..\src\stuff.cpp:104:16: error: wrong number of …
Run Code Online (Sandbox Code Playgroud)

c++ g++4.8

1
推荐指数
1
解决办法
609
查看次数

标签 统计

c++ ×2

bit-manipulation ×1

g++4.8 ×1

optimization ×1

x86 ×1