如果变量是booleanchar(在C/C++中)或byte(在Java之类的语言中-不用等待Java在VM上),并且CPU使用大于1个字节的字,这是否浪费空间?我听说当变量存储在内存中时,即使一个字是4个字节,它也可以存储得更紧凑,例如1个字节。有人可以解释这是怎么发生的吗?这似乎是倒退,因为寄存器比RAM更为珍贵。

最佳答案

尽管寄存器具有存储数字的能力,但它们并不完全是“空格”。

考虑以下示例:您在一个大盒子里放了一堆名片,并且希望按字母顺序排列它们。在此过程中,您将盒子中的卡片从一个位置移到另一位置。尽管在将卡片移动到盒子中的新位置时手握了卡片,但您的手却无法像盒子一样为卡片提供存储空间。您手中的位置太宝贵了,无法称为“空间”。

继续使用卡类比,想象卡具有不同的大小。手的大小可让您一次握住一张大卡,两张中卡或四张小卡。但是,对卡片进行排序时,多张卡片对您来说几乎没有优势,尤其是当卡片均匀洗净时:多张卡片具有多个目标位置,因此,如果您抓取卡片,则需要执行更复杂或不必要的操作同时使用多张卡片。

同样,CPU的寄存器可能包含多个字节,但是如果您需要执行计算,则通常没有办法告诉CPU使用哪个字节:寄存器作为不可分割的单元参与操作。这就是为什么将整个字用于寄存器中的数据的原因,即使只有一个字节就足够了。

09-04 16:18
查看更多