关于内存存储空间的理解

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

int[] a=new int[3]

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

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

这里注意:

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

为什么是4K呢?

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

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_36470686/article/details/83117182