正如您在第2.1课中学到的--基本寻址和变量定义,现代机器上的内存通常被组织成字节大小的单元,每个单元具有唯一的地址.。在这一点上,它是有用的认为记忆是一束分支或邮箱,我们可以把和检索信息,和变量作为访问这些分支或邮箱名称。
然而,这种类比在一个方面并不十分正确,大多数变量实际上占用了超过1字节的内存.。因此,一个变量可以使用2,4,甚至连续8个内存地址.。变量使用的内存量取决于它的数据类型.。幸运的是,因为我们通常通过变量名而不是内存地址访问内存,编译器在很大程度上能够隐藏与我们使用不同大小变量的细节.。
有几个原因可以知道变量占用了多少内存.。
首先,变量占用的内存越多,它可以容纳的信息越多。因为每个位只能持有0或1,我们说,比特可以容纳2个可能的值。
o概括,变量N位可以容纳2n(2到N,通常也写了2 ^ N)的权力可能值。因为一个字节是8位,一个字节可以存储28(256)可能的值。
变量的大小限制了它可以存储的信息量--利用更多字节的变量可以容纳更广泛的值.。我们将进一步解决这个问题,当我们进入不同类型的变量。
其次,计算机有有限数量的自由内存。每当我们声明一个变量时,只要这个变量存在,这个自由内存的一小部分就被使用了.。因为现代计算机有大量的内存,这通常不是问题,特别是如果只声明一些变量.。然而,对于需要大量变量(如100000)的程序,使用1字节和8字节变量之间的差异是显著的.。
然而,你可能在你的系统变量的大发现(尤其是int,这通常是4字节)。
C++的基本数据类型的大小
下一个问题是“不同数据类型的变量需要多少内存?“。您可能会惊奇地发现给定数据类型的大小依赖于编译器和/或计算机体系结构.!
C++保证基本数据类型都会有一个最小尺寸:
然而,这种类比在一个方面并不十分正确,大多数变量实际上占用了超过1字节的内存.。因此,一个变量可以使用2,4,甚至连续8个内存地址.。变量使用的内存量取决于它的数据类型.。幸运的是,因为我们通常通过变量名而不是内存地址访问内存,编译器在很大程度上能够隐藏与我们使用不同大小变量的细节.。
有几个原因可以知道变量占用了多少内存.。
首先,变量占用的内存越多,它可以容纳的信息越多。因为每个位只能持有0或1,我们说,比特可以容纳2个可能的值。
2位可以容纳4个可能的值:
td::cout << "bool:\t\t" << sizeof(bool) << " bytes" << std::endl;
std::cout << "char:\t\t" << sizeof(char) << " bytes" << std::endl;
std::cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << std::endl;
std::cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << std::endl; // C++11, may not be supported by your compiler
std::cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << std::endl; // C++11, may not be supported by your compiler
std::cout << "short:\t\t" << sizeof(short) << " bytes" << std::endl;
std::cout << "int:\t\t" << sizeof(int) << " bytes" << std::endl;
std::cout << "long:\t\t" << sizeof(long) << " bytes" << std::endl;
std::cout << "long long:\t" << sizeof(long long) << " bytes" << std::endl; // C++11, may not be supported by your compiler
std::cout << "float:\t\t" << sizeof(float) << " bytes" << std::endl;
std::cout << "double:\t\t" << sizeof(double) << " bytes" << std::endl;
std::cout << "long double:\t" << sizeof(long double) << " bytes" << std::endl;
o概括,变量N位可以容纳2n(2到N,通常也写了2 ^ N)的权力可能值。因为一个字节是8位,一个字节可以存储28(256)可能的值。
变量的大小限制了它可以存储的信息量--利用更多字节的变量可以容纳更广泛的值.。我们将进一步解决这个问题,当我们进入不同类型的变量。
其次,计算机有有限数量的自由内存。每当我们声明一个变量时,只要这个变量存在,这个自由内存的一小部分就被使用了.。因为现代计算机有大量的内存,这通常不是问题,特别是如果只声明一些变量.。然而,对于需要大量变量(如100000)的程序,使用1字节和8字节变量之间的差异是显著的.。
然而,你可能在你的系统变量的大发现(尤其是int,这通常是4字节)。
C++的基本数据类型的大小
下一个问题是“不同数据类型的变量需要多少内存?“。您可能会惊奇地发现给定数据类型的大小依赖于编译器和/或计算机体系结构.!
C++保证基本数据类型都会有一个最小尺寸: