与其将单个 bool 值存储到一个字节 block 中,不如将 8 个 bool 值存储到同一个 block 中。
示例:01010101 = 8 个 bool 值,1 3 5 7 = 假,2 4 6 8 = 真。
这行得通吗?
有没有更好的办法?
这样做有什么优点和缺点?
这会对网络产生很大影响吗?
最佳答案
您所描述的通常称为 bit fields ;它们通常在空间非常宝贵(在位和字节级别)或您真的想缩小某些东西时使用。这包括(但不限于):
- 压缩算法
- 通用协议(protocol),限制开销
- 缩小工作数据以适应缓存
否则,就像编程中的大多数其他问题一样,您最好使用为您处理此类低级别细节的解决方案,或者让您的代码尽可能简单。有时这意味着坚持使用普通 bool
s 因为它描述了您的代码的意图。如果您的语言和代码库很容易支持位字段,那也很好。为了完整性,C/C++ 支持 bit fields native 通过此结构冒号语法:
struct Foo {
char f1 : 1;
char f2 : 1;
char f3 : 1;
// ...
};
... 其中冒号后的数字表示该字段使用的位数。还有 vector<bool>
但这是一种有问题的类型,现在很少使用,而且也比较笨拙。
为了更直接地回答您的问题,除非您正在使用开销非常低的网络协议(protocol),否则您不太可能需要使用位域。与网络中通常的时间尺度相比,空间节省是最小的,如果你真的担心它,你最好使用现成的解决方案,如 protocol buffers .
关于c++ - 自定义数据类型是否是可变大小效率的可能且可行的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182408/