|
|
@ -15,11 +15,11 @@ comments: true
|
|
|
|
|
|
|
|
|
|
|
|
!!! question "数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响?"
|
|
|
|
!!! question "数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响?"
|
|
|
|
|
|
|
|
|
|
|
|
栈内存分配由编译器自动完成,而堆内存由程序员在代码中分配(注意,这里的栈和堆和数据结构中的栈和堆不是同一概念)。
|
|
|
|
存储在栈上和堆上的数组都被存储在连续内存空间内,数据操作效率是基本一致的。然而,栈和堆具有各自的特点,从而导致以下不同点。
|
|
|
|
|
|
|
|
|
|
|
|
1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。
|
|
|
|
1. 分配和释放效率:栈是一块较小的内存,分配由编译器自动完成;而堆内存相对更大,可以在代码中动态分配,更容易碎片化。因此,堆上的分配和释放操作通常比栈上的慢。
|
|
|
|
2. 栈是一块比较小的内存,容易出现内存不足;堆内存很大,但是由于是动态分配,容易碎片化,管理堆内存的难度更大、成本更高。
|
|
|
|
2. 大小限制:栈内存相对较小,堆的大小一般受限于可用内存。因此堆更加适合存储大型数组。
|
|
|
|
3. 访问栈比访问堆更快,因为栈内存较小、对缓存友好,堆帧分散在很大的空间内,会出现更多的缓存未命中。
|
|
|
|
3. 灵活性:栈上的数组的大小需要在编译时确定,而堆上的数组的大小可以在运行时动态确定。
|
|
|
|
|
|
|
|
|
|
|
|
!!! question "为什么数组要求相同类型的元素,而在链表中却没有强调同类型呢?"
|
|
|
|
!!! question "为什么数组要求相同类型的元素,而在链表中却没有强调同类型呢?"
|
|
|
|
|
|
|
|
|
|
|
|