或计算机体系结构
2016-09-10 15:27
169 查看
当您在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++保证基本数据类型都会有一个最小尺寸:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
然而,这个比喻在一个方面是不太正确的-大多数变量实际上占用超过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++保证基本数据类型都会有一个最小尺寸:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
相关文章推荐
- 计算机体系结构基本概念
- 计算机体系结构(一)——进制
- 计算机网络体系结构
- 计算机体系结构的铁律(iron law)
- 【计算机组成原理】指令系统体系结构
- 计算机网络体系结构
- 计算机体系结构
- 计算机结构以及体系
- 【计算机体系结构】硬盘--硬件设备在linux下的文件名
- 计算机体系结构
- 计算机体系结构量化研究方法
- 计算机网络体系结构
- 计算机体系结构——存储体系
- linux内核编程入门(二) —— 计算机体系结构及汇编 - 王飞 | Beautiful Code - CSDNBlog
- 关于计算机体系结构-北桥和南桥
- 深入理解计算机系统——第04章——处理器体系结构
- 计算机体系结构2_系统编程手册
- 计算机体系结构--主辅存储器
- 计算机体系结构7_缓存控制机制
- 计算机系统体系结构