标签:分配 实现 obj 大小 原因 空间 需要 补充 lis
1.java:
java本身是没办法实现动态数组的,这个java本身不直接操作指针有关系【虽然我觉得理论上应该是和c一样,可以办到的,但java不提供,具体原因等知道了再补充】。那么java的集合例如ArrayList集合这样的是如何实现“动态数组”的呢。其实原理是:ArrayList的底层是一个数组a【Object[] a = new Object[]】, 如果需要改变ArrayList的大小,则丢弃ArrayList原先对a的引用, 然后new一个新的数组[ Object[] b = new Object[], 长度自定义],并引用之。
2.c语言:
原理:
(1)动态数组--创建,使用malloc函数:malloc的作用是在内存中动态分配一个自定义长度的连续空间;
(2)动态数组--改变数组的大小,使用relloc函数:relloc的作用是:
a) 减少数组长度:当数组所在内存本身有剩余空间时,可按需将其本身的尾部内存拿掉【说明:对内存的操作限定在该数组所分配的内存块内】;
b)增加数组长度:当数组所在内存的尾部有多余空间时,按需直接在原先的内存块尾部新增内存;如果原先的内存尾部空间不足,则relloc重新分配一块新的内存空间,并把原先内存的内容复制到新的内存块 上。
标签:分配 实现 obj 大小 原因 空间 需要 补充 lis
原文地址:http://www.cnblogs.com/chxbar/p/7452309.html