2位可以容纳4个可能的值

来源:互联网 发布:小老虎是什么网络用语 编辑:程序博客网 时间:2024/04/28 05:10
当您在2.1课中学习到基本的寻址和变量定义时,现代机器上的内存通常被组织成字节大小的单位,每个单元有一个唯一的地址。在这一点上,它是有用的认为记忆是一束分支或邮箱,我们可以把和检索信息,和变量作为访问这些分支或邮箱名称。
然而,这个比喻在一个方面是不太正确的-大多数变量实际上占用超过1字节的内存。因此,一个变量可以使用2,4,甚至8个连续的内存地址。一个变量使用的内存量是基于它的数据类型。幸运的是,因为我们通常通过变量名访问内存,而不是内存地址,编译器在很大程度上能够隐藏与我们不同大小的变量的工作细节。
有几个原因,它是有用的知道多少内存一个变量占用。
首先,一个变量占用的内存越多,它所能容纳的信息就越多。因为每个位只能容纳一个0或1,我们说位可以容纳2个可能的值。

2位可以容纳4个可能的值:


以偏概全,变量N位可以容纳2N(2到N,通常也写了2 ^ N)的权力可能值。由于一个字节是8位,一个字节可以存储28(256)可能的值。
变量的大小限制了它可以存储的信息量-利用更多字节的变量可以容纳更广泛的值。当我们进入不同类型的变量时,我们将进一步解决这个问题。
第二,计算机有一个有限数量的自由内存。每当我们声明一个变量时,只要变量存在时,可用内存的一小部分。因为现代计算机有很多的内存,这往往不是一个问题,特别是如果只声明了一些变量。然而,对于需要大量变量的程序(如100000),使用1字节和8字节变量之间的差异可以是显着的。
然而,你可能在你的系统变量的大发现(尤其是int,这通常是4字节)。
C++的基本数据类型的大小
明显的下一个问题是“不同类型的数据类型的内存量是多少?“。你可能会惊讶地发现,一个给定的数据类型的大小是依赖于编译器和/或计算机体系结构!
C++保证基本数据类型都会有一个最小尺寸:


12345678910111213141516171819#include <iostream> int main(){    using namespace std;    cout << "bool:\t\t" << sizeof(bool) << " bytes" << endl;    cout << "char:\t\t" << sizeof(char) << " bytes" << endl;    cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << endl;    cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << endl; // C++11, may not be supported by your compiler    cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << endl; // C++11, may not be supported by your compiler    cout << "short:\t\t" << sizeof(short) << " bytes" << endl;    cout << "int:\t\t" << sizeof(int) << " bytes" << endl;    cout << "long:\t\t" << sizeof(long) << " bytes" << endl;    cout << "long long:\t" << sizeof(long long) << " bytes" << endl; // C++11, may not be supported by your compiler    cout << "float:\t\t" << sizeof(float) << " bytes" << endl;    cout << "double:\t\t" << sizeof(double) << " bytes" << endl;    cout << "long double:\t" << sizeof(long double) << " bytes" << endl;    return 0;}


0 0