关于内存存储空间的理解

我们在这拿一个一维数组举例子

int[] a=new int[3]

 

a数组的地址引用存放在栈中,指向堆中a数组的首个值。

因为是数组,所以数组中各个值在堆中的存储空间是连续的。

这里注意:

在内存中,操作系统将内存划分为多个空间,这里每个空间为4K(4096字节)。

 

为什么是4K呢?

因为这个空间中只要存了数据,那么下次存放数据会存放到下一个空间。(比如a[0]和a[1]存储的便不是同一个空间)

如果这个空间过大,而我往往存的东西没那么多,便会浪费空间。

如果这个空间过小,那么内存划分的空间数便会过多,每个空间又要分配一个地址,因此就要分配很多地址。而地址在内存中有专门的地方存储,如果地址过多,也会浪费空间。

所以我们采取了折衷的方法,取了4K。

 

为什么这个空间中只要存了数据,那么下次存放数据会存放到下一个空间?

如果放在当前空间,无法获取新数据首地址

 

你说地址存储不会占用很多空间?

那我们来看看每个地址占多少个字节

若内存为8G,空间划分为每个空间1K,那么用8G的字节除以1K的字节,一共要划分800w个左右的空间,那么便要分配800w个左右的地址。那么每个地址要5个字节才能存储这么多的地址。那么一共需要 5*800w  字节存储地址。这个空间占用的还不够多吗

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值