为什么一个字大于1个字节?

Cel*_*tas 3 c++ memory cpu assembly cpu-registers

如果变量是a boolean或a char(在C/C++中)或a byte(在某些语言中如Java - 不等待VM上的Java)并且CPU使用大于1字节的字,那么是不是浪费了空间?我听说当变量存储在存储器中时它可以存储得更紧凑,例如1字节,即使一个字是4字节.有谁可以解释这是怎么发生的?它看起来倒退,因为寄存器比RAM更重要.

das*_*ght 8

尽管它们能够存储数字,但寄存器并不完全是"空间".

考虑这个例子:你在一个大盒子里有一堆名片,你想按字母顺序排列它们.在这样做的过程中,您将盒子中的卡片从一个地方移动到另一个地方.虽然当您将卡片移到盒子中的新位置时手中拿着一张卡片,但是您的手不能像盒子一样为卡片提供存储空间.你手中的地方太贵了,不能称之为"空间".

继续卡片类比,想象卡片有不同的大小.您的手的大小可以让您一次握住一张大卡,两张中卡或四张小卡.但是,当您对卡片进行分类时,获取多张卡片的能力对您来说很少有利,特别是当卡片统一洗牌时:多张卡片有多个目标位置,因此如果您抓住,则需要执行更复杂或不必要的操作多张卡片同时出现.

类似地,CPU的寄存器可能包含多个字节,但是如果需要执行计算,通常无法告诉CPU使用哪些字节:寄存器作为不可分割的单元参与操作.这就是为什么整个字用于寄存器中的数据,即使只有一个字节就足够了.


Sam*_*ica 6

一般来说,单词是适合单个寄存器的数据量.

如果你使寄存器更窄,比如8位,那么需要多个周期才能增加2个32位的整数.

我也认为你希望你的RAM地址空间也适合一个单词.