c++ - 为什么一个字会大于 1 个字节?

原文 标签 c++ memory assembly cpu cpu-registers

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

最佳答案

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

考虑这个例子:你有一堆名片在一个大盒子里,你想按字母顺序排列它们。在此过程中,您将盒子中的卡片从一个地方移动到另一个地方。尽管在将卡片移到盒子中的新位置时您将其握在手中,但您的手并不像盒子那样为卡片提供存储空间。你手中的地方太宝贵了​​,不能称之为“空间”。

继续卡片类比,想象卡片有不同的大小。手的大小可让您一次握住一张大牌、两张中牌或四张小牌。然而,当你对卡片进行排序时,多张卡片的能力对你来说几乎没有什么好处,尤其是当卡片被均匀洗牌时:多张卡片有多个目的地,所以如果你抓了,你将需要做更复杂或不必要的操作多张卡同时使用。

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

关于c++ - 为什么一个字会大于 1 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512601/

相关文章:

c++ - 如何检测std::thread被异步终止?

linux - 80x86 汇编 - 从 Windows 到 Linux 的非常基本的 I/O 程序转换

c++ - C++:ASM破坏者 list

c - strcpy生产重复的存储项目

c++ - vector 元素在堆栈/堆中?长输入,C++

perl - 是否应该重用单个HTML::SimpleLinkExtor对象以提高内存效率?

performance - 为什么有些编程语言比其他语言快?

c++ - C++ 中的简单字符串实现

c++ - 操纵C风格的琴弦?

c++ - 数组类型不可分配