当前位置:首页 > 内存 > 正文

动态数组在什么时才开辟内存区

  • 内存
  • 2024-06-01 21:14:37
  • 1678

一、JAVA里,ArrayList在内存分配上究竟是怎样的?

ArrayList是一个动态数组和对象。

创建一个ArrayList对象,它是一个连续的内存区域,存储在堆内存中。

ist是使用数组实现的。该数组的内存是连续的,相邻元素之间没有其他内存。

2.对ArrayList进行索引时,必须使用get方法,该方法是一个函数调用,并且比原生数组慢,因为直接使用[]访问数组。当然,这和直接操作内存地址是一样的。它比函数调用更快。

3.创建新的ArrayList时,JVM会分配默认或指定大小(由数组封装)的连续内存区域。

4.每次添加元素时,都会创建一个新的连续内存区域,检查容量是否不足(初始大小+步长)。封装为数组类型,将原来的内存区域数据复制到新的内存区域,然后使用ArrayList中引用原来封装的数组对象的引用变量来引用新的数组对象。

elementData=(elementData,newCapacity);

5.集合内存分配和初始化过程示例


二、C语言里,什么时候用数组什么时候用指针和动态内存(malloc/calloc)?如果明确知道所需内存的大小,则可以使用数组。
数组的大小实际上是有限的,因为本地数组是在堆栈上分配的,如果限制,则堆栈大小受到限制。如果超过,就会发生堆栈溢出。
如果你不能清楚地知道需要的内存大小,这种情况在编程中很常见,你只能使用动态内存br/>但是使用动态内存。容易出现bug,主要是忘记释放内存(内存溢出)和野指针(malloc返回的指针指向的地址没有分配的内存地址)。内存很容易造成内存碎片。这些问题对于嵌入式系统来说是致命的。所以要格外小心。当明确知道大小且大小不大时,建议使用数组。/>其他情况下,使用动内存并记住释放内存并为指针分配空值以避免错误。
随着您将来获得更多的编程经验。你就会知道如何处理它。数组和动态内存都用,一定要因地制宜。