假设我有三部分信息,它们可以作为一个字节的一部分存储。
我没有任何内存限制。
第一个实现是
struct info{
unsigned char info_a;
unsigned char info_b;
unsigned char info_c;
}
第二个实现是
unsigned char info; // bit 0..2 info_a, bit 3..4 info b, bit 5..7 info_c
哪一个是
的更快版本
答案 0 :(得分:2)
在大多数典型的现代平台上,struct方式会更快。这是因为单个指令可用于加载或存储单个字节,而子字节加载和存储则需要额外的操作。
当然,如果你有很多次需要一次设置所有三个值,或者一次清除它们,或者你受内存限制(例如你存储了数十亿这些值),那么子字节解决方案将有一个优势。
答案 1 :(得分:1)
如果您有一个这样的实例,那么我认为不会有任何有意义的差异,因为它们都比一个字长。单个char版本可能会变慢,因为你不需要对结构进行一些操作。
如果你在数组和循环中有数百万这些,那么我希望单个字符的更紧凑的数据将减少缓存未命中的数量,这将弥补位操作中的任何微小损失在数据。
但与以往一样,您必须在特定环境中对其进行测试才能确定。