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

标签 c++ memory assembly cpu cpu-registers

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

最佳答案

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

考虑这个例子:你有一堆名片放在一个大盒子里,你想按字母顺序排列它们。在这样做的过程中,您将盒子中的卡片从一个地方移动到另一个地方。尽管在将卡片移动到盒子中的新位置时您将卡片握在手中,但您的手并不能像盒子那样为卡片提供存储空间。你手中的地方,值(value)连城都称不上“空间”。

继续用卡片做类比,假设卡片有不同的尺寸。您的手掌大小可以让您一次握住一张大牌、两张中号牌或四张小牌。然而,当你对牌进行排序时,拿取多张牌的能力很少对你有好处,尤其是当牌被均匀洗牌时:多张牌有多个目的地点,所以你需要做更复杂或不必要的操作,如果你拿同时多张卡片。

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

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

相关文章:

c++ - 我们什么时候需要 C++ 中的私有(private)构造函数?

c++ - ARM64 上的 vtbl2 内在函数缺失

c++ - DirectX 向后兼容性

c++ - 函数指针内存使用

c - 在C语言中,如何更改指针指向的内存地址?

memory - GCC 中的后链接器汇编代码

c++ - 如何修改线程中的字符串?

Go 内存分配——新对象、指针和逃逸分析

assembly - 如何在 AVX/AVX2 中增加向量

c++ - 用c++写汇编代码