大家干杯!
我想将一些数据存储在内存中的结构或数组中。我的问题是数据对齐。我真的不能在 char 旁边使用 8 字节数据,因为它们一起占用 16 字节。
现在我很乐意使用一个 8 字节的字段,例如 char,并使用剩余的 7 个字节来存储其他数据。
我该怎么做?支付的性能惩罚是什么? 谢谢大家。
最佳答案
您可以使用位域自动执行 Arkku 建议的位移数学运算:
struct {
uint64_t one_byte:8;
uint64_t seven_byte:56;
};
会有轻微的访问开销,但如果您计划使用如此多的空间以至于空间非常宝贵,那么这是值得的。在如此多的内存上,改进的缓存局部性将很容易抵消一些移位/掩码操作。
关于C++:数据对齐和内存的有效使用(在时间和空间上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231865/