首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈对堆栈,堆对堆

堆栈对堆栈,堆对堆
EN

Stack Overflow用户
提问于 2014-05-06 20:59:47
回答 5查看 7K关注 0票数 10

我正在为我的数据组织期末考试而学习,我正在研究堆栈和堆,因为我知道它们将在决赛中,我需要知道它们之间的区别。我知道堆栈是什么和堆是什么。

但我搞不懂什么是堆栈,什么是堆。

堆栈是内存中存储内存的地方,如果内存空间不足,就会发生堆栈溢出。默认情况下,对象存储在这里,当对象超出作用域时,它会重新分配内存,而且速度更快。

堆是内存中存储内存的地方,如果内存空间不足,操作系统将分配更多内存。对于要存储在堆中的对象,需要使用新的运算符通知对象,并且只有在通知时才会解除分配。碎片问题可能会发生,它比堆栈慢,而且它能更好地处理大量内存。

但是什么是堆栈,什么是堆?这是存储内存的方式吗?例如,静态数组或静态向量是堆栈类型,而动态数组,链接列表是堆类型?

谢谢大家!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-06 21:06:44

“堆栈”和“堆”是程序或操作系统以特定方式使用的内存块。例如,调用堆栈可以保存与函数调用有关的数据,而是专门用于动态分配空间的内存区域。

将它们与堆栈和堆https://en.wikipedia.org/wiki/Data_structure进行对比。

堆栈可以被认为是一个数组,其中最后一个元素将是第一个输出元素。这方面的操作称为push和pop。

是一种数据结构,它表示一种特殊类型的图,其中每个节点的值都大于节点的子节点的值。

另外,请记住,“堆栈”或“堆”或任何堆栈/堆数据结构对于任何给定的编程语言都是唯一的,但只是计算机科学领域中的概念。

票数 11
EN

Stack Overflow用户

发布于 2014-05-06 21:21:30

我不会进入虚拟内存(如果你想读的话),所以让我们简化一下,假设您有一定大小的RAM。

您的代码具有静态初始化数据,还有一些静态未初始化数据( C++中的静态数据意味着全局vars)。你有你的密码。

当您编译某些代码时,编译器(和链接器)将以下列方式组织代码并将其转换为机器代码(字节码、1和零):

二进制文件(和对象文件)被组织成段(RAM的一部分)。

首先是数据段。这是包含初始化变量值的段。因此,如果u有变量,即int a=3, b = 4,它们将进入数据段(包含00000003h的4个内存字节,以及包含000000004h十六进制表示法的其他4个字节)。它们是连续存储的。

然后是代码段。您的所有代码都被转换为机器代码(1s和0s),并连续存储在此段中。

然后是BSS段。出现了未初始化的全局vars (所有未初始化的静态vars )。

然后是堆栈段。这是为堆栈保留的。默认情况下,堆栈大小由操作系统决定。你可以改变这个值,但我现在不想谈这个问题。所有局部变量都在这里。当您调用某个函数时,首先将函数args推入堆栈,然后返回地址(退出函数时返回的位置),然后在这里推送一些计算机寄存器,最后在函数中声明的所有局部变量在堆栈上获得它们的保留空间。

还有堆段。这是内存的一部分(大小也由OS决定),其中的对象和数据是使用操作符new.存储的。

然后,所有的段是一个接一个的数据,代码,BSS,堆栈,堆。还有一些其他的部分,但它们在这里并不重要,这是由操作系统加载在RAM中的。二进制文件还包含一些标题,其中包含代码从哪个位置(内存中的地址)开始的信息。

因此,简而言之,它们都是RAM的一部分,因为正在执行的所有内容都被加载到内存中(不能在ROM (只读)中),也不能在硬盘上存储文件。

票数 6
EN

Stack Overflow用户

发布于 2014-05-06 21:13:49

当特别提到C++的内存模型时,堆和堆栈是指内存的区域,这很容易与堆栈数据结构和堆数据结构混淆,但是它们是不同的概念。

在讨论编程语言时,堆栈内存被称为“堆栈”,因为它的行为类似于堆栈数据结构。堆有点用词不当,因为它不一定(或者很可能)使用堆数据结构。有关C++的堆和数据结构的名称为何相同的讨论,请参见为什么两个不同的概念都被称为“堆”?,尽管这是两个不同的概念。

因此,要回答你的问题,这取决于背景。在编程语言和内存管理的上下文中,堆和堆栈引用具有特定属性的内存区域。否则,它们指的是特定的数据结构。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23504409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档