布尔类型为何有32位?(补充)
布尔类型为何有32位?(补充)
昨天我总结了一些关于布尔类型为何占据32位内存空间的知识,尽管里边大部分的解释意思都到点上了,但我仍然觉得很不严谨,因此我在这里进行进一步补充。
其实关于变量这个东西,它在硬盘上的状态和在内存上的状态是不一样的,变量对于我们来说,实际上是屏幕上的字符,而屏幕上的字符其本质上是以文件的形式存储的,即使它处于编辑状态位于内存上时,它本质上还是编辑器上的编码,它此时占用的内存大小其实就是这些字符的真实大小,而我们所说的32bit实际上是它被编译器编译成class文件后并被运行起来后,真正参与程序运算时所占用的内存地址,所以我们讨论的布尔型内存空间,是它参与程序的逻辑运算时在java运行时中占用的空间地址。
诚然在运行时中我们也可以使用1bit的内存来存储一个布尔类型,但是在之前我也提到了,这是不可行的,计算机只能识别最少为8bit的信息,这是由于计算机设计导致的,那我们为什么不用8bit来表示一个布尔类型,而是用32bit呢?
在我查阅资料后,找到了一个相对准确的答案,其实还是运行效率的事情:使用32位对布尔类型进行存储会让系统效率更高。只不过和内存为变量分配的空间关系没那么大,而是和CPU的存取机制有着直接的联系。当今的CPU大多是32位或64位的,因此CPU通常一次可以存取32位或者64位的信息,因此我们将布尔类型存储为32位可以最大限度的使用CPU的一次存取机会,让CPU的存取效率提升到最高。
同时在内存中,系统为每个变量都提供一个4kb大小的页,多占用一些也是完全没关系的,还能提升CPU的吞吐量,较大限度的使用CPU,这其实是利大于弊的。
因此:布尔类型设计成32位的真正原因是为了提升CPU的效率,同时因为如今的计算机资源比以前丰富了很多,有牺牲存储效率提升运行效率的条件了,因此将布尔类型设计成了32位。归根结底是人类为了提升效率而特意设计成这样的。