计算机的物理单元(内存)
内存中基本的物理单元大小一般是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