计算机地址和内存,内存和地址

先来看一个比喻,这个比喻颇为有用,但也存在局限性。

我们可以把内存看为一条长街上的一排房屋,每座房屋都可以容纳数据,并通过一个房号标识。

计算机的内存由数以万计的位(bit)组成,每个位可以容纳值0和1。由于一个位所能表示的值的范围太有限,所以单独的位用处不大,通常许多位合成一组作为一个单位,这样就可以存储范围较大的值。

图例展示了现实机器中的一些内存位置:

e4747794a9f9

这些位置的每一个都被称为字节(byte),每个字节都包含了存储一个字符所需的位数。

在现代机器上每个字节(byte)包含8个位,可以存储无符号数0至255或有符号值-128至127。图例中并没有显示这些位置的内容,但内存中每个位置总是包含一些值。每个字节通过地址来标识,如图示中方框上面的数字。

为了存储更大的值,我们把两个或更多字节组合在一起作为一个更大的内存单位。例如,许多机器以“字”为单位存储整数,每个字一般由2个或者4个字节组成。

e4747794a9f9

由于它们包含更多的位,每个字将容纳的数值范围将会更大。

注意!

尽管一个字包含了更多的字节,但它仍然只有一个地址。至于它的地址是最左边那个字节的位置还是最右边那个字节的位置,不同机器有着不同规定。

另一个是边界对齐(boundary allignment)在要求边界对齐的机器上,整型存储的起始位置,只能是某些特定的字节,通常是2和4的倍数。

值得C程序员注意的两点:

内存中每个位置由一个独一无二的地址标识;

内存中每个位置都包含一个值;

地址与内容

图示:

e4747794a9f9

图中显示内存中5个字的内容,每个都位于自己的字中,如果记住了一个值的地址那么以后就可以根据地址取得该值。

但是,要记住这些地址实在是很笨拙的办法,所以高级语言所提供的特性之一就是通过名字而不是地址来访问内存的位置。

如下图示:

e4747794a9f9 这些名字就是我们所称的变量。

有一点非常重要,需牢记,名字与内存位置之间的关联并不是硬件所提供的,它是由编译器来实现的。

所有这些变量给我们一种更方便的方法记住地址—硬件仍然通过地址访问内存位置。

END!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值