内存的逻辑模型,在介绍程序时,大部分参考书都会用类似于楼房的图形来表示内存。在这个楼房中,1层可以存储1个字节的数据,楼层号表示的就是地址。对于程序员来说,这种形象的解说有助于了解内存。
虽然内存的实体是内存IC,不过从程序员的角度来看,也可以把它假想成每层都存储着数据的楼房,并不需要过多地关注内存IC的电源和控制信号等。因此,之后的讲解中我们也同样会使用楼房图(或者与楼房相似的图)。内存为1KB时,表示的是如图4-3所示的有1024层的楼房(这里地址的值是从上往下逐渐变大,不过也有与此相反的情况)。
图4-3 1KB内存的模型
不过,程序员眼里的内存模型中,还包含着物理内存中不存在的概念,那就是数据类型。编程语言中的数据类型表示存储的是何种类型的数据。从内存来看,就是占用的内存大小(占有的楼层数)的意思。即使是物理上以1个字节为单位来逐一读写数据的内存,在程序中,通过指定其类型(变量的数据类型等),也能实现以特定字节数为单位来进行读写。
下面我们来看一个具体的示例。如代码清单4-1所示,这是一个往a、b、c这3个变量中写入数据123的C语言程序。这3个变量表示的是内存的特定区域。通过使用变量,即便不指定物理地址,也可以在程序中对内存进行读写。这是因为,在程序运行时,Windows等操作系统会自动决定变量的物理地址。
代码清单4-1 各种类型的变量
//定义变量
char a;
short b;
long c;
//给变量赋值
a =123;
b =123;
c =123;
这3个变量的数据类型分别是,表示1字节长度的char,表示2字节长度的short,以及表示4字节长度的long。因此,虽然同样是数据123,存储时其所占用的内存大小是不一样的。这里,我们假定采用的是将数据低位存储在内存低位地址的低字节序(littleendian)方式(图4-4)。
图4-4 变量的数据类型不同,所占用的内存大小也不一样
仔细思考一下就会发现,根据程序中所指定的变量的数据类型的不同,读写的物理内存大小也会随之发生变化,这其实是非常方便的。大家不妨想一想,假如程序中只能逐个字节地对内存进行读写,那该多么不便啊。在处理超过1个字节的数据时,还必须要编写分割处理程序。此外,在不同的编程语言中,变量可以指定的数据类型的最大长度也不相同。C语言中,8字节(=64位)的double类型是最大的。
酷客网相关文章:
评论前必须登录!
注册