2.3-变量的大小与sizeof操作符

 

从2.1节《详解变量的定义、初始化与赋值》的学习中我们了解到,现代计算机的内存通常是按byte大小的单元进行...





从2.1节《详解变量的定义、初始化与赋值》的学习中我们了解到,现代计算机的内存通常是按byte大小的单元进行组织的,每个单元都是唯一的标识地址,从这个意义讲,我们可以形象地把内存看成一系列文件夹/邮箱,可以用来存放和检索信息,变量就是用来访问这些文件夹/邮箱的名称。

但是,这样的类比从某方面看也是不准确的——大多数的变量实际上占用超过一个字节的内存,单个变量可能使用2个、4个甚至8个连续的内存地址。变量占用的数据类型取决于其数据类型。幸运的是,由于我们通常使用变量名而不是内存地址访问内存,所以编译器能在很大程度上对我们隐藏处理不同大小变量的细节。

了解一个变量占用多少内存有几个好处。

首先,一个变量占用越多的内存,就应当能保存越多的信息。因为每个bit只能保存0或1,所以我们说一bit能够保存两个可能的值。

2bit可以存放4个可能的值:

bit 0bit 1000110113bit可以存放8个可能的值:

bit 0bit 1bit 2000001010011100101110111依次类推,一个n bit的变量可以存放2^n个可能的值,所以一个字节byte可以存放2^8(256)个可能的值。

变量的大小限制了其存储信息的能力,当我们接触更多不同类型的变量时会进一步了解这一点。

其次,计算机的可用内存是有限的,一旦我们声明了一个变量,只要这个变量还存在,就会占用一部分的空闲内存。由于现代计算机的内存通常很大,所以这通常不是问题(特别是只有几个变量的小程序),但是如果你的程序拥有巨量的变量(例如10,000个)或者可用内存相当有限(例如进行单片机开发时),使用1字节和8字节的变量性能开销就会是天壤之别。

C++基本数据类型的大小

接下来的问题就是如何确定变量占用内存的大小了,你可能会感到惊讶,一个给定数据类型实际上取决于编译器/计算机架构。

C++规定基本数据类型占用的最小内存如下:

种类数据类型最小占用内存布尔型bool1 byte字节型char1 bytewchar_t1 bytechar16_t2 bytesC++11char32_t4 bytesC++11整型short2 bytesint2 byteslong4 byteslong long8 bytesC99/C++11浮点型float4 bytesdouble8 byteslong double8 bytes实际计算机上的变量大小可能与此不同,为了确定数据类型的大小,C++提供了一个操作符:sizeof。sizeof操作符为一元操作符,接受参数为变量名或者数据类型,以字节为单位返回其大小,你可以编译运行以下程序以了解你计算机上的变量大小。

#include

int main()
{
std::cout 


    关注 编程爱好者读书笔记


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册