首页 > 试题广场 >

在Windows中,下列关于堆和栈的说法中错误的是?

[单选题]
在Windows中,下列关于堆和栈的说法中错误的是?
  • 堆都是动态分配的,没有静态分配的堆;栈有静态分配和动态分配2种分配方式。
  • 堆的生长方向是向下的,即向着内存地址减小的方向增长;栈的生长方向是向上的,即向着内存地址增加的方向增长。
  • 对堆的频繁new/delete会造成内存空间的不连续,从而造成大量的碎片;栈则不会存在这个问题
  • 栈是由编译器自动治理;堆的释放工作由程序员控制,轻易产生内存泄露。
推荐
选 B
1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  
2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事。  
区别:  
1. 管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存溢出。  
2. 空间大小:堆内存几乎是没有什么限制。栈一般都是有一定的空间大小。 
3. 碎片问题:对于堆来讲,频繁的new/delete会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题。  
4. 分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。  
5. 分配效率:栈的效率比较高。堆的效率比栈要低得多。
6. 增长方向:堆的增长方向是从程序低地址到高地址向上增长,而栈的增长方向刚好相反(实际情况可能不是这样的,与CPU的体系结构有关)

注意:这里的堆和数据结构中的堆没啥关系。
编辑于 2019-04-23 14:52:21 回复(2)
B.
堆是不连续的,生长方向是向上的,即向着内存地址增大的方向增长;栈是连续的,生长方向是向下的,即向着内存地址减小的方向增长。
发表于 2015-09-07 10:17:45 回复(1)
堆和栈的区别主要有五大点: 1)申请方式不同:栈由系统自动分配,而堆是人为申请开辟的; 2)申请大小不同:栈获得的空间较小,而堆获得的空间较大; 3)申请效率的不同:栈由系统自动分配,速度较快,而堆一般速度比较慢; 4)存储内容的不同:栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数各个参数进栈,其中静态变量是不进栈的,而堆中一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排的; 5)底层不同,栈是连续的空间,而堆是不连续的空间。
发表于 2022-01-08 08:16:32 回复(3)
B
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。
发表于 2015-09-11 12:52:58 回复(0)
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《堆和栈区别 生长方向》, 一起来围观吧 https://blog.csdn.net/zhangnn5/article/details/6780217?utm_source=app&app_version=5.1.1
发表于 2022-03-03 14:39:46 回复(0)
栈是向下生长的
B
发表于 2015-03-27 13:43:21 回复(0)
堆是不连续的,生长方向向上,向着内存地址增长的方向,栈连续的,生长方向向下,向着内存地址减少的方向增长
发表于 2022-02-20 15:43:49 回复(0)
B
栈是由高地址往低地址分配空间的。
发表于 2015-03-11 17:52:45 回复(0)
栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由 malloc 函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
发表于 2020-09-19 03:51:51 回复(0)
堆和栈
发表于 2024-03-11 17:00:12 回复(0)
不知道为啥向下生长 大概是为了便于判断栈溢出吧
发表于 2022-10-09 21:06:36 回复(0)
为啥栈不会有内存碎片啊
发表于 2022-03-16 14:22:48 回复(0)
堆的生长方向是向上的,由低地址向高地址,生活中的“堆”似乎也是这样。堆由程序员自己申请和释放,栈则是系统分配
发表于 2022-03-03 08:14:59 回复(0)
堆是不连续的,生长方向是向上的,即向着内存地址增大的方向增长;栈是连续的,生长方向是向下的,即向着内存地址减小的方向增长。
发表于 2020-04-04 11:49:32 回复(0)