数组存储压缩原理

1.计算机的物理单元(内存)

**内存中基本的物理单元大小一般是4KB。**计算机保存着每个物理单元的首地址(但是如果是文件形式,一般保留整个文件流的首地址)。
(物理单元大小的设置是经过权衡的:如果物理单元太小,每一小块物理块都包含地址,那么计算机用于存储所有物理块的地址文件也会变得很大。如果物理单元太大,那么容易造成空间浪费)

2.变量存储

前边说到,计算机只保留每个物理单元的首地址。当我们声明两个变量时(这里假设两个变量的大小之和小于4KB),第二个变量必须放到第二个物理单元内(假如紧接着放在第一个物理单元的第一个变量之后,那么计算机将访问不到第二个变量)。

3.数组的特性

数组的特性是大小固定,物理地址连续,即可以通过索引访问到每个元素。当我们定义一个数组变量后,这个数组的大小就已经确定并且不能更改了。比如:
int [] a=new int [100];
定义了一个含有100个int 数值的数组。
假如目前按照普通变量存储,那么整个数组将会占用100*4KB=400KB的存储空间。
在这里插入图片描述但是数组的特性是物理存储连续,数组元素通过索引获取。并且操作系统对数据的操作可以精确到位。那么操作系统可以将int 数据连续地放在物理单元内。当操作系统访问后续元素时,只要根据数据类型位数为单位向后寻找就可以了。比如int数据每个占8位,那么访问a[1]就是访问目的物理单元的第9~17位。于是数组经压缩称为下图:
在这里插入图片描述
那么a[0]就是10001010
a[1]起始地址就是首地址+1*8位。
a[2]起始地址就是首地址+2*8位。
a[3]起始地址就是首地址+3*8位。
这样,数组不通过将每个元素放到不同的物理单元内就可以访问到每一个元素,大大节省内存空间浪费并减轻了内存地址分配压力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值