问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

堆(heap)和栈(Stack)的区别是什么?为什么平时都把...

发布网友 发布时间:2022-04-20 01:23

我来回答

4个回答

热心网友 时间:1天前

将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:

一、主体不同

1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。

2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。


二、特点不同

1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。

2、栈:是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。

三、作用不同

1、堆:堆是非线性数据结构,相当于一维数组,有两个直接后继。

2、栈:可以用来在函数调用的时候存储断点,做递归时要用到栈。


参考资料来源:百度百科-堆

参考资料来源:百度百科-栈

热心网友 时间:1天前

1、堆、堆栈、栈
堆和栈都和编译、编程有关。但很多老师在讲具体的程序设计语言时,重点在语法。将它们跳过,或简单地称其为堆栈。堆栈是内存的逻辑层面的东西。在谈论上层应用时,经常忽略它们。久而久之就出现了“堆栈”这个混乱的术语。但这个术语已经存在,大多数人提到堆栈时,意思是“栈”,所以它成为约定俗成,那么你只能接受。堆是heap。栈是stack。堆栈就是栈。

2、进程、线程 与 堆、栈
现在是多任务系统。每个进程是资源(不含处理器资源)分配的基本单位。每个进程含若干线程。线程是调度执行的基本单位。同一个进程的多个线程可以共享所属进程的资源。程序员可以进行同步控制(多线程编程)。
每个进程有一个或几个堆。这要看不同的OS了。程序员要在堆中分配/释放空间,需要malloc free这样的显式操作。java中的new操作,建立对象,其实也间接执行了malloc这样的操作。对象的回收其实也要执行free。不过是包装了一下而已。
每个线程有一个私有资源,那就是栈。函数调用时,要把返回地址和参数入栈。被调函数执行时,要把参数取出来,赋给形参。被调函数执行完后还要把返回地址取出来,跳回去。栈是自动实现的,不需要程序员干预。(因为编译器实现了)。局部变量也位于栈。

3、内存管理分页机制
Windows / Linux采用段页式。但这只是内存管理方法。跟堆栈是两回事啊。并不矛盾。

热心网友 时间:1天前

程序的运行场所是内存,栈和堆是进程的虚拟内存中的两部分区域。
当程序被执行时,程序代码,你所创建的变量、常量等都会被压入栈空间里,栈是程序代码的执行区域。栈的内存地址是连续的且被一一记录,所以说当你创建了一个变量(比如int var = 1),我们就可以通过var这个变量来访问变量的内容。在这里,var就存放在栈中,它的地址已经默认被编译器计算好了,调用过程也不需要你涉及到有关地址的操作。更直观的感受是数组,数组里的元素在栈里面是连续排放的,相邻两个元素的地址相差1。
而堆是不同于栈的另一部分区域,系统会给每个程序分配一部分栈空间让他们能够运行起来,问题就是栈空间必然存在不够用的问题,而堆不属于程序,堆是独立的,是公用的。只要你malloc(sizeof(SIZE_YOU_WANT)),就可以得到相应一部分的堆空间。

有栈,为什么用堆?
::栈里面的东西有生命周期,说俗点就是变量作用域,你在函数内部创建一个变量,函数调用结束这个变量就没了。而堆里面的东西独立于你的程序,malloc()之后,除非你free()掉,否则一直存在。

为什么用堆少?
::麻烦!

有什么要注意?
::堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你说申请到的堆空间的地址。不然就找不到你申请的空间了。
既然涉及到指针,请注意用之前检查一下指针空不空的问题。
堆空间的东西申请好,在用完之后一定要free()掉,以防止堆溢出。
说到安全性,还真是挺麻烦的。(纯手打)

热心网友 时间:1天前

堆栈 = 栈 = Stack
用malloc(),free()分配的就叫堆
堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?

一、主体不同 1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同 1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全...

堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?

1、栈使用的是一级缓存,通常都是被调用时处于存储空间中,调用完毕立即释放;2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。三、堆栈数据结构区别:堆(数据结构):堆可以被看成是一棵树,如:堆排...

heap和stack有什么区别 java

1). 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2). 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。

python堆和栈的区别有哪些

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。(5)分配效率不同。栈由操作系...

stack 和heap都是堆积的意思,两者有区别吗

在计算机语言中,stack 表示栈,heap表示堆,这是两个概念。栈stack是计算机系统提供的具有后进先出特点的数据结构,而堆heap是函数库提供的内部结构,为分配新内存空间服务的。在日常英语中,二者都指堆积(动词)和一堆(名词),但是 heap 通常指杂乱的、呈小山状的一堆东西,如:Now, the house ...

堆和栈(Heap and Stack)的区别!

堆(Heap):堆(Heap)是动态分配的,你可以在任意时间自由分配!使用起来肯定比栈(Stack)复杂,但是也给了我们灵活性!操作系统在线程建立时会自动为系统级线程分配Stack,而Heap的分配是由程序运行时调用系统完成的!Stack的速度比Heap要快的多!Image source:  vikashazrati.wordpress.com ...

java中堆和堆栈有什么区别

1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆...

heap和stack有什么区别

heap和stack有什么区别?heap--堆 stack--堆栈 栈是用来静态分配内存的而堆是动态分配内存的,它们都是存在于计算机内存之中。栈的分配是在程序编译的时候完成的,直接存储在内存中,接触内存很快。栈是后进先出的顺序,最后被申请的块最先被释放,这样就很容易跟踪到栈,释放栈的过程简单到仅仅是移动...

heap和stack有什么区别标准答案

1.heap是堆,stack是栈。2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。3.stack空间有限,heap的空间是很大的自由区。在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。4.举例...

heap和stack有什么区别

堆(heap)和栈(stack)有什么区别??简单的可以理解为:heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(...

stack和heap的区别 堆栈与微堆栈的区别 堆栈和栈的区别 pile和stack的区别 退栈和出栈有什么区别 堆和栈的概念和区别 简述堆和栈的区别 内存中stack和heap 栈堆的区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iqoo为什么不值得入手? iQOO12有必要入手吗? ipad微信为什么可以看视频却没有声音 为什么ipad的微信视频通话没有声音? ipad上的微信为什么没有声音提醒? 奥运会2024结束时间是几号 ...能把电脑上一些常用图标归类的软件 在桌面只留一个图标 打开后里面... x3和5系是一个档次吗 奥运会2024年几号结束 奇怪了,我电脑上的桌面怎么有部分在屏幕外..大家帮忙 一个女生对你说我不是你想像中的那个人 这是什么意... 什么是栈内存和堆内存 女生对男生说,我不是你想的那种人,女生说的是什... 有关堆内存和栈内存的问题 数据结构的堆栈,和内存空间的堆栈有什么区别和关... 数据结构的堆栈和内存空间的堆栈有什么区别和关系吗? 谁可以给内存做个简单定义?它与栈和堆有什么关系? 系统中使用堆和栈管理内存的区别 栈内存和堆内存的区别 内存中的栈和堆有什么作用? 堆、栈、动态内存、内存,它们的区别和联系 堆栈与内存的关系 如何在win7 64位系统下运行 16位软件 win7 64位系统在哪里下载的稳定纯净啊! 如何可以在WIN7的64位系统下使用的CAD2004 windows764位系统怎么安装 win7 64位支持最大内存是多少? 怎样在windows7 64位系统下装xp系统,详细的教程, 如何在win7 64位系统下 安装32位驱动 请问win7 64位系统怎么样? 第一次和女人见面,走路挨得有点近,她说:我不是... 我不是你想象的那种人 英语怎样翻译 内存,数据结构之栈和堆的区别 我不是你想的那个人? 如何理解java的堆内存和栈内存? 如何回复 我已经不是你想的那个人 中国古代民间四大传说是哪四个? 我不是你想的那种人 请你相信我好不好? 中国有四大民间传说,分别是哪四个? 男人很爱女人,有一次男人问女人,如果有一天你知... 我国四大传说故事是什么? 男友说:别生气了,我不是你想象的那种人,以后很难... 中国古代民间四大传说故事是哪四个 我不是你想象的那种人 怎么说呢 中国四大传说故事是什么? (女说)我不是你想的那个人? 中国四大神话故事分别是哪几个? 我不是你想象的那种人,如果我给你一笔可观的酬劳呢... 我不是你想的那种人。 中国民间四大故事是哪四个?