有人可以解释一下小数据类型char
(8 位)或short
(16 位)与int
(32 位)(尤其是 C/C++ 中)相比有什么优势。
在我看来,它并没有带来任何优势,尤其是。在 32 位机器上,因为它的字长总是 32 位。这是编译器的事情,在某些情况下可以将一些小类型组合在一个寄存器中以节省内存吗?那么小型数据类型是否仅适用于低于 32 位或/和内存不足的硬件架构?
另外,我通过溢出数据类型看到了一个新的失败目标,所以我认为不应该轻易使用它......
即使机器的字长为 32 位,并不意味着所有的数据类型都存储在字边界,甚至信息存储的最小单位是字。假设您必须创建一个包含一千个字符的向量。如果你像这样创建它:
std::vector<char> v(1000);
它将使用大约一千字节(通常)。如果您假设最小存储单元是单词,您可以像这样声明它(认为无论如何每个字符都将使用 32 位单词):
std::vector<int> v(1000);
但这会给你大约 4 个字节 * 1000,这是之前声明的四倍。
也就是说,有时,根据您声明类型的方式,它们会被打包,因此它们不使用单词来存储每条信息。在第一种情况下,编译器/实现vector<char>
将创建一个 1000 字节的缓冲区来存储所有打包的字符。
所以,答案是优势是节省内存空间。