我有3个无符号整数,范围为[0,255]。我想将这3个数字存储到一个紧凑的存储器中,因为这个操作经常发生,我想知道如何改进它。
最初我试过这个:
struct Foo {
uint8_t x;
uint8_t y;
uint8_t z;
};
Foo arr[] = ...;
void pushBack(unsigned x, unsigned y, unsigned z) {
arr[count].x = x;
arr[count].y = y;
arr[count++].z = z;
}
结果并不好,所以我尝试了这个:
struct Foo {
union {
struct {
uint8_t x;
uint8_t y;
uint8_t z;
uint8_t pad_;
} v;
uint32_t u32;
};
};
Foo arr[] = ...;
void pushBack(unsigned x, unsigned y, unsigned z) {
arr[count++].u32 = (z << 16) | (y << 8) | x;
}
结果有所改善。
我想知道是否有办法通过SSE和/或AVX指令进一步改善这一点。