美文网首页
【搬运】堆和栈的区别是什么

【搬运】堆和栈的区别是什么

作者: show16 | 来源:发表于2020-02-01 01:43 被阅读0次

很多人对于堆和栈的区别都感到迷惑,因此我们列出了许多堆和栈的问题和回答,或许对你有帮助。

1. 堆和栈存储在哪里?

堆和栈都存储在计算机的RAM(Ramdon Access Memory)中。阅读 How Virtual Memory Works 了解更多RAM的内容。

2. 线程是如何操作堆和栈的 ?堆和栈在多线程条件下是如何工作的?

在一个多线程的应用程序中,每一个线程都会有它自己的栈。但是,所有的线程都会共享堆。在一个多线程的应用程序中,由于不同的线程共享堆,因此线程之间必须协作以保证它们不会在同一时间访问或操作堆中的相同内存。

3. 栈和堆中的内存都存储多久呢?

一旦一个函数运行完成了,该函数的栈中的数据将会被自动删除。而堆中的任何数据需要程序手动删除(或者通过垃圾回收机制回收),否则将将会一直保留在堆中。

4. 栈的大小可以增加吗?堆的大小可以增加吗?

栈被设置成固定的大小,并且大小不能增加(有些语言做了扩展允许增加栈大小)。因此,如果栈上没有足够的空间去分配内存,会发生stack overflow错误。这种情况常常发生如果有许多嵌套的函数被调用,或者这儿有个死循环调用。
如果分配内存的时候堆的空间不够,那么操作系统会给堆增加内存。这是堆和栈最大的区别之一。

5. 堆和栈是怎么实现的?

堆和栈的实现依赖于语言,编译器和运行时。

6. 堆和栈哪个更快?为什么?

栈是更快且开销更小。这是因为栈上内存分配的方式:栈上分配内存是非常简单的,只需要向上移动栈指针。

7. 栈和堆上的内存是如何回收的?

当变量超出范围(?)时,栈上的数据是自动回收的。在C和C++中,堆中存储的数据必须由开发者利用以下关键字free,delete,或者delete[]手动删除。其它语言像Java和.NET使用垃圾回收去自动从堆中删除内存,而不需要开发者做任何事。

8. 栈和堆用哪一个?

不同的语言有不同的机制。



原文链接: difference-between-stack-and-heap

我做了什么:搬运原文,简单翻译,保留了一些通用的问题和回答。如有错误,欢迎指正。

相关文章

  • 【搬运】堆和栈的区别是什么

    很多人对于堆和栈的区别都感到迷惑,因此我们列出了许多堆和栈的问题和回答,或许对你有帮助。 1. 堆和栈存储在哪里?...

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • 2018-01-03三题

    1.堆内存和栈内存的区别是什么? 线程的堆内存空间是共享的,栈内存空间才是独立的(堆共享,栈独立)。 2.wait...

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • iOS面试(2)

    1、内存中的栈和堆的区别是什么?那些数据在栈上,哪些在堆上?#define和const定义的变量,有什么区别什么情...

  • 栈与堆讲解--(面试题)

    栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?(为什么栈的储存分配比堆存储分配快) 一、问题 1、为什么栈...

  • 字节跳动后端面经四

    jvm为什么分为堆和栈?堆和栈是什么,具体讲一讲 TCP相较于UDP是如何保证安全性 http版本的区别 http...

  • 栈和堆的区别

    堆栈空间分配区别 1、栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的...

  • 堆和栈的区别

    作者:思羽链接:https://www.zhihu.com/question/19729973/answer/13...

  • 栈和堆的区别

    最主要的区别: Java中所有由类实例化的对象(new)和数组都存放在堆内存中,无论是成员变量,局部变量,还是类变...

网友评论

      本文标题:【搬运】堆和栈的区别是什么

      本文链接:https://www.haomeiwen.com/subject/purtxhtx.html