内存在现代计算机中,被组织成以byte为基本单元。而每个单元都有一个地址。讲到这里大家可以想象这些内存如同一个个的小邮箱小格子,我们可以放入信息取出信息。而变量名就用来访问这些小邮箱小格子。
但是在某种程度上来说这也并不是恰当的。大部分的变量都至少大于1byte。一个变量可能会用2,4甚至8个个连续的内存地址。需要用到的内存大小取决于数据类型。因为我们一般从名字来判断数据类型,所以编译器可以隐藏起变量内存占用等的细节。
下面有一些关于内存占用的原因:
第一: 占用越多的byte也就代表这个变量信息量越大。因为一个bit只能保持一个0或者1,也就是一个bit可以存储2个不一样的值。而2个bit可以储存4个。
bit 0 | bit 1 |
---|---|
0 | 0 |
0 | 1 |
1 | 0 |
1 | 1 |
3个bit可以储存8个,n个bit可以储存2^n个,因为一个byte就是8个bit,一个byte可以储存2^8 (256)个值。
变量内存占用大小是根据有多大的信息量来确定的。占用大的可以储存更大的数字。我们会在下面的章节继续探讨这个问题。
第二:电脑的内存是有限的,我一次我们声明一个变量也就意味着内存空间的一小块就不在是空闲的了。现代计算机一般内存都比较大,所以这并不是一个很大的问题。但是如果一个程序中需要大量的变量(eg. 100,000)。那么变量是1byte还是8byte就显得区别很大了。
下一个问题就是:不同的数据类型需要占用多大的内存空间。答案是这需要根据编译器和电脑的构架。在大多数32位机中,1个char就是1byte,一个bool就是1byte。一个short就是2byte,一个int是4byte,一个long是4byte,一个float是4byte,一个double是8byte。
为了查看不同数据类型占用内存的大小,c++提供了一个操作符sizeof来查看。这是一个单元操作符。操作数可是一个类型或者一个变量。返回的是byte。你可以在你的电脑上试一下。
|
下面是在Pentium 4机器上使用Visual Studio 2005 Express的结果。
bool: 1 bytes
char: 1 bytes
wchar_t: 2 bytes
short: 2 bytes
int: 4 bytes
long: 4 bytes
float: 4 bytes
double: 8 bytes
long double: 8 bytes
如果你使用不同的机器或者编译器,可能结果会有一些不同。也许你会好奇在上面程序中的\t是什么。他是一个特别的符号tab。我们将会在后面的char数据类型中讲到。
有趣的是,sizeof是c++中仅有的三个,以单词而不是符号来当操作符的。
你也可以用sizeof一个变量的名字:
1
2
|
int
x;
cout <<
"x is "
<<
sizeof
(x) <<
" bytes"
<<endl;
|
现在关于变量你知道的已经够多了,下面就是具体探讨数据类型了。