首页 > 试题广场 >

关于操作系统heap与stack说法中,正确的是()。

[不定项选择题]
关于操作系统heap与stack说法中,正确的是()。
  • stack由编译器自动分配和释放,存放函数的参数值,局部变量,全局变量的值
  • heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
  • stack由系统自动分配,无需程序员干涉,heap需要手动申请
  • heap与stack都会在初始大小空间用满时,系统自动增加其大小
A错在了全局变量,全局变量放在static静态区
发表于 2015-09-01 11:07:23 回复(1)
关于选项B:
在堆上分配内存
可能许多人对内存分配上的“栈  stack ”和“堆  heap ”还不是很明白。包括一些科班出身的人也不明白这两个概念。简单的来讲, stack 上分配的内存系统自动释放,  heap 上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。 stack 一般是静态分配内存, heap 上一般是动态分配内存。
malloc 系统函数分配的内存就是从堆上分配内存。从堆上分配的内存一定要自己释放。用 free 释放,不然就是术语——“内存泄露”(或是“内存漏洞”)——  Memory Leak 。于是,系统的可分配内存会随 malloc 越来越少,直到系统崩溃。还是来看看“栈内存”和“堆内存”的差别吧。
参看: http://www.360doc.com/content/05/0929/14/1894_15840.shtml
发表于 2015-09-01 16:48:34 回复(10)
A 错误在全局变量存在.data段和.bss段;
发表于 2015-09-02 11:33:21 回复(0)
B选项不对吧,程序结束后,进程相关的内存会由操作系统内存管理器统一回收掉的,包括在程序运行期间***存,求解
发表于 2015-09-01 11:42:51 回复(11)
曾经一篇博客中看到一个很恰当的比喻,stack比成下馆子吃饭,你只管吃,别的买菜做菜上菜洗碗等活都是馆子里的人做的,当然钱还是要付的;而heap就像是自己在家里做饭,什么都要自己动手,完了还要刷锅洗碗。区别就是这样的了。
发表于 2016-08-05 15:21:33 回复(0)
B选项有歧义,不释放的话,会造成“操作系统”内存泄漏。。。在进程运行期间,可用堆空间会越来越少的,但当进程结束后,操作系统会回收该进程的一切资源/proc/pid/中的东西会清空。

发表于 2016-04-02 17:37:25 回复(0)
A选项错在,全局变量应该放在全局区,而不是栈区
发表于 2015-09-06 21:30:27 回复(0)
对于D的解释
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 Windows下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
堆: 为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。
发表于 2017-04-08 20:51:47 回复(1)
heap与stack都会在初始大小空间用满时,栈会报栈溢出,堆会分配失败
发表于 2015-09-04 11:53:26 回复(1)

heap&stack 区别

1.heap是堆,stack是栈。

2.stack的空间由操作系统(不是编译器)自动静态分配和释放(进站和出栈可控);heap的空间是手动申请和释放的,heap常用new关键字来动态分配(—“内存泄露”——    Memory Leak   )。

3.stack空间有限(经常有栈溢出,而不是堆溢出),heap的空间是很大的自由区。

在Java中,

若只是声明一个对象,则先在栈内存中为其分配地址空间,

若再new一下,实例化它,则在堆内存中为其分配地址。

4.举例:

数据类型 变量名;这样定义的东西在栈区。

如:Object a =null; 只在栈内存中分配空间

new 数据类型();或者malloc(长度); 这样定义的东西就在堆区

如:Object b =new Object(); 则在堆内存中分配空间

编辑于 2015-09-03 09:15:56 回复(1)
.heap是堆,stack是栈,不要搞混。
发表于 2015-09-21 16:13:24 回复(0)
区分stack和static
发表于 2018-10-13 13:20:26 回复(0)
全局变量!
发表于 2022-08-30 10:13:17 回复(0)
heap的大小都是由程序员来分配的
发表于 2022-08-07 10:31:16 回复(0)

1.heap是堆,stack是栈。

2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。

3.stack空间有限,heap的空间是很大的自由区。

发表于 2019-06-21 20:39:09 回复(0)
heap堆,stack栈的知识点
发表于 2019-05-09 20:58:18 回复(0)
全局变量在static区
发表于 2019-03-24 11:51:55 回复(0)
A错在了全局变量,全局变量放在static静态区 这题是问栈和堆的
发表于 2019-03-15 22:37:06 回复(0)
A错在了全局变量,全局变量放在static静态区
发表于 2018-11-29 14:03:10 回复(0)
全局变量放在.data 或.bss区,并不是栈中
发表于 2018-10-28 00:09:45 回复(0)