首页

文章

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

发布网友 发布时间:2022-03-28 10:33

我来回答

4个回答

热心网友 时间:2022-03-28 12:02

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

一、主体不同

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

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


二、特点不同

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

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

三、作用不同

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

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


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

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

热心网友 时间:2022-03-28 13:20

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

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

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

热心网友 时间:2022-03-28 14:55

堆栈 = 栈 = Stack
用malloc(),free()分配的就叫堆

热心网友 时间:2022-03-28 16:46

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

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

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

有什么要注意?
::堆里面申请的东西,是随机分配的,不像栈里面的地址都已经计算好了。所以申请了堆空间之后一定要创建一个指针保存你说申请到的堆空间的地址。不然就找不到你申请的空间了。
既然涉及到指针,请注意用之前检查一下指针空不空的问题。
堆空间的东西申请好,在用完之后一定要free()掉,以防止堆溢出。
说到安全性,还真是挺麻烦的。(纯手打)
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 java虚拟机jam的两个内存栈内存和堆内存的区别 metcn 是什么? 要人体模特钟瑞的个人资料 什么是METCN? 肖辰的metcn-作品 metcn毛明资料 我想要名模邓晶的个人资料 模特高行美出生年 明星刘嘉玲和人体艺术的刘嘉玲是一个人吗 郎玉的主要作品 中国新模特 高行美资料 METCN ,这是个什么词? 404 Not Found 和张慧敏一样出名的中国人体模特还有哪些? 请问谁有 metcn 所有的作品目录啊? 中国现在依然能接活动的 女性人体模特的排行榜谁有? 52bt论坛里的rar文件的解压密码是多少啊? 404 Not Found 堆栈与堆有什么区别? 内存管理之堆和栈的区别 内存分配中堆和栈的区各是指什么 堆和栈在内存中的区别 js栈内存和堆内存的区别 堆和栈的区别 mate20pro可以用mate40pro的充电器吗? 王者荣耀像是追击敌方某某某,保护我方某某某的怎么发? 《王者荣耀》里像是“追击敌方某某某,保护我方某某某”的怎么发? 王者荣耀5v5战如何发送追击对方指令? 英雄联盟追杀敌方英雄时,鼠标怎么点?? 玩王者荣耀的时候英雄会不受控制的追敌方英雄或攻击其他方向怎么办? 王者荣耀梦奇怎么追击敌方 王者荣耀 怎么让英雄打指定的人 王者荣耀推塔时一有小兵出现就会自动打小兵,不可以直接推塔。。怎么办? 王者荣耀梦奇怎么追击敌方 梦奇不被人风筝怎么玩 球球大作战生存模式上榜有哪些技巧 追击敌人是什么短语类型? LOL自动攻击敌方英雄的键位是哪个能设置吗 英雄联盟怎么回头A人,如何边走边A?需要设置什么吗? 于谦是如何追击残余敌人的? 怎么样才能追击啊....卡在一个任务需要3次追击
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com