在 C++ 中,为什么 bool 需要一个字节来存储 true 或 false,而只有一位就足够了,比如 0 表示 false,1 表示 true? (为什么Java也需要一个字节?)
其次,使用下面的安全多少?
struct Bool {
bool trueOrFalse : 1;
};
第三,即使是安全的,上面的野外技术真的有用吗?因为我听说我们在那里节省了空间,但编译器生成的访问它们的代码仍然比生成的访问原语的代码更大更慢。
最佳答案
Why does a bool require one byte to store true or false where just one bit is enough
因为 C++ 中的每个对象都必须是可单独寻址的*(也就是说,您必须能够拥有指向它的指针)。您无法解决单个位(至少不能在传统硬件上)。
How much safer is it to use the following?
它是“安全的”,但效果并不大。
is the above field technique really going to help?
不,出于与上述相同的原因;)
but still compiler generated code to access them is bigger and slower than the code generated to access the primitives.
是的,这是真的。在大多数平台上,这需要访问包含字节(或 int
或其他),然后执行位移和位掩码操作以访问相关位。
如果您真的担心内存使用情况,可以使用 std::bitset
在 C++ 或 BitSet
中在 Java 中,打包位。
* 有少数异常(exception)。
关于java - 一字节 boolean 值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14220726/