基本内置类型的存储空间

2011.5.10

     《C++ Primer》:C++的内置基本类型在内存中的存储空间依机器而定,C++标准是规定了每个基本类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。 下表是C++标准中的基本类型最小存储空间。

类型                  含义                 最小存储空间
bool                布尔型                    ——
char                字符型                    8 bit
wchar_t          宽字符型                 16 bit
short              短整型                    16 bit
int                   整型                       16 bit
long                长整型                    32 bit
float                单精度浮点型           6位有效数字
double            双精度浮点型           10位有效数字
long double    扩展精度浮点型        10位有效数字

      那么什么叫做“C++基本数据类型的存储空间依机器而定”呢?我们首先来了解几个重要的概念:

1、主存储器(内存)

      计算机运行C++程序的过程中,基本数据类型的值都暂时存放在主存储器中。主存的物理介质主要采用半导体器件和磁性材料。其中最小的存储单位就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元 ,它可以存储一个二进制码(0或1)。若干个存储元组成一个存储单元 ,许多存储单元组成了主存储器。

      实际上,主存储器的底层只是一些由0和1组成的二进制串,没有任何的结构和意义。

      让存储具有结构的最基本方法就是块(chunk)处理存储 。大部分计算机将8个存储元(8 bit)作为一个存储单元(1 byte),每个存储单元分配一个称为地址的数。这样CPU就可以方便的进行寻址和存取数据了。

2、CPU字长、数据总线、地址总线

      我们经常说到32位CPU指的是CPU的字长 ,即CPU在单位时间内(同一时间)能一次性处理的二进制数的位数,也可以指CPU寄存器最大位长为32bit。那么CPU执行的每条指令可以处理的数据最大值不能超过32bit,如果要处理64bit的数据就必须分多步处理。

      数据总线 用于CPU与存储器或I/O接口之间的数据传输。32位的数据总线指CPU一次指令能够取出的32bit的数据,通常数据总线的宽度与CPU的字长相一致。例如Intel 8086微处理器字长16位,其数据总线宽度也是16位。

      地址总线 用于CPU向主存传输地址数据,这个数据就是为主存中每个存储单元分配的地址值。地址总线的位数决定了CPU可直接寻址的内存空间大小,例如Intel 8086的地址总线为20位,其地址可以表示的范围为0——2^20。如果存储器的一个存储单元是8bit(即一个地址有8bit),那么该CPU可以寻址的主存大小不超过2^20*8bit=1M。


       理解了这些概念之后,我们来谈谈C++的基本数据类型的存储空间实质上随CPU字长的不同而不同

      当然,这句话是正确的,但有一点要注意,对于C++的编译器有一个不成文的约定:就是根据机器字长来定义int的长度,最能反映代码的效率。这是为什么呢? 因为字长是CPU在一次处理数据的位数,在32位的CPU上编译C++,整型按32位来存储,自然一次就能处理掉一个整型数据,不用分多步进行,效率自然不一样。

      很可惜,这只是个约定,而不是法律。如果C++编译器就是按照自己的标准来定义C++基本数据类型的大小,也并非不可。为此,想要保证程序中的基本数据类型的值不越界,必须了解你所使用的编译器。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值