介绍:
我很好奇将小数字存储为位压缩无符号整数与字节向量的性能差异(cpu 和内存使用)
例子
我将使用存储 RGBA 值的示例。它们是 4 字节,因此很容易将它们存储为u32
.
但是,将它们存储为类型的向量会更具可读性u8
。
作为更详细的示例,假设我想存储和检索颜色 rgba(255,0,0,255)
这就是我将如何去做这两种方法:
// Bitpacked:
let i: u32 = 4278190335;
//binary is 11111111 00000000 00000000 11111111
//In reality I would most likely do something more similar to:
let i: u32 = 255 << 24 + 255; //i think this syntax is right
// Vector:
let v: Vec<u8> = [255,0,0,255];
然后可以查询两个红色值
i >> 24
//or
&v[0]
//both expressions evaluate to 255 (i think. I'm really new to rust <3 )
问题 1
据我所知, 的值v
必须存储在堆上,因此存在与之相关的性能成本。这些成本是否足以使钻头包装物有所值?
问题2
然后是两个表达式i >> 24
and &v[0]
。我不知道 rust 在位移和从堆中获取值的速度有多快。我会对其进行测试,但我暂时无法使用安装了 rust 的机器。有人可以就这两个操作的缺点提供任何直接的见解吗?
问题 3
最后,内存使用的差异是否简单到只在堆栈上存储 32 位与在堆栈上u32
存储 64 位作为指针v
以及在堆上存储 32 位的值v
?
对不起,如果这个问题有点令人困惑