数组存储压缩原理

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


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


数组的特性
数组的特性是大小固定,物理地址连续,即可以通过索引访问到每个元素。当我们定义一个数组变量后,这个数组的大小就已经确定并且不能更改了。比如:
int [] a=new int [100];
定义了一个含有100个int 数值的数组。
假如目前按照普通变量存储,那么整个数组将会占用100*4KB=400KB的存储空间。
在这里插入图片描述


压缩数组的原理
数组的特性是物理存储连续,数组元素通过索引获取。并且操作系统对数据的操作可以精确到位。那么操作系统可以将int 数据连续地放在物理单元内。当操作系统访问后续元素时,只要根据数据类型位数为单位向后寻找就可以了。比如int数据每个占8位,那么访问a[1]就是访问目的物理单元的第9~17位。于是数组经压缩为下图:
在这里插入图片描述

那么a[0]地址就是0*8+1位到1*8位;
a[1]地址就是1*8+1位到2*8位,以此类推。

注:数组增删改查操作后,数组会自动依次移位。当第一个物理单元存满时,再寻找下一个连续的第二个物理单元继续压缩存储。

参考博文:https://blog.csdn.net/Jonsnow1457/article/details/90743285

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值