Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 小型数据类型的优势_Types_Char_Int_Short - Fatal编程技术网

Types 小型数据类型的优势

Types 小型数据类型的优势,types,char,int,short,Types,Char,Int,Short,有人能解释一下像char(8位)或short(16位)这样的小数据类型与int(32位)(特别是在C/C++)相比有什么优势吗 在我看来,它不会带来任何优势,尤其是在32位机器上,因为它的字长总是32位的。在某些情况下,一些小类型可以组合在一个寄存器中以节省内存,这是编译器的事情吗?那么,小型数据类型是否仅适用于低于32位或/或内存很少的硬件架构 另外,我看到了一个新的失败目标,即数据类型溢出,因此我认为不应该轻易使用它…即使机器的字大小为32位,也不意味着所有数据类型都存储在字边界中,甚至信息

有人能解释一下像
char
(8位)或
short
(16位)这样的小数据类型与
int
(32位)(特别是在C/C++)相比有什么优势吗

在我看来,它不会带来任何优势,尤其是在32位机器上,因为它的字长总是32位的。在某些情况下,一些小类型可以组合在一个寄存器中以节省内存,这是编译器的事情吗?那么,小型数据类型是否仅适用于低于32位或/或内存很少的硬件架构


另外,我看到了一个新的失败目标,即数据类型溢出,因此我认为不应该轻易使用它…

即使机器的字大小为32位,也不意味着所有数据类型都存储在字边界中,甚至信息存储的最小单位是字。假设您必须创建一个包含一千个字符的向量。如果您这样创建它:

std::vector<char> v(1000);
标准向量v(1000); 它将使用大约1000字节(通常)。如果假设最小存储单元是单词,则可以这样声明它(认为每个字符都将使用一个32位单词):

标准向量v(1000); 但这将给您大约4字节*1000,这是之前声明的四倍

也就是说,有时,根据您声明类型的方式,它们会被打包,因此它们不会使用一个词来存储每一条信息。在第一种情况下,
vector
的编译器/实现将创建一个1000字节的缓冲区来存储所有打包的字符

因此,答案是这样做的好处是节省内存空间

std::vector<int> v(1000);