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