经典指数          
原因
3500
浏览数
0
收藏数
 

在Windows中,下列关于堆和栈的说法中错误的是?
  • 堆都是动态分配的,没有静态分配的堆;栈有静态分配和动态分配2种分配方式。
  • 堆的生长方向是向下的,即向着内存地址减小的方向增长;栈的生长方向是向上的,即向着内存地址增加的方向增长。
  • 对堆的频繁new/delete会造成内存空间的不连续,从而造成大量的碎片;栈则不会存在这个问题
  • 栈是由编译器自动治理;堆的释放工作由程序员控制,轻易产生内存泄露。

     举报   纠错  
 
切换
1 个答案

选 B

1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  

2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事。  

区别:  

1. 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存溢出。  

2. 空间大小:堆内存几乎是没有什么限制。栈一般都是有一定的空间大小。 

3.

碎片问题:对于堆来讲,频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题。

 

4. 分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。  

5. 分配效率:栈的效率比较高。堆的效率比栈要低得多。

6.

增长方向:堆的增长方向是从程序低地址到高地址向上增长,而栈的增长方向刚好相反(实际情况可能不是这样的,与CPU的体系结构有关)

注意:这里的堆和数据结构中的堆没啥关系。

 
切换
撰写答案