栈和堆的区别 蔚落 2022-03-25 01:52 322阅读 0赞 说起会了解这个东西,还是比较尴尬的,在学校里面老师一般不会讲解C++的堆和栈,大多数人了解的堆和栈是数据结构里面的概念,而这里一般面试官想问的是C++的内存分区管理方式。 首先说明,在C++中,内存分为5个区:堆、占、自由存储区、全局/静态存储区、常量存储区 栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new\[\]与一个delete\[\]对应。如果程序员没有释放掉, 资源将由操作系统在程序结束后自动回收。自由存储区:是由malloc等分配的内存块,和堆十分相似,用free来释放。全局/静态存储区:全局变量和静态变量被分配到同一块内存中(在C语言中,全局变量又分为初始化的和未初始化的,C++中没有这一区分)。常量存储区:这是一块特殊存储区,里边存放常量,不允许修改。(注意:堆和自由存储区其实不过是同一块区域(这句话是有问题的,下文解释),new底层实现代码中调用了malloc,new可以看成是malloc智能化的高级版本,详情参见new和malloc的区别及实现方法, 以及 这一篇) # 疑问一:堆和自由存储区是不是同一块区域 # 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中 # 疑问二:堆和栈的区别 # ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tjaG9pc2UwMzA_size_16_color_FFFFFF_t_70][] 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tjaG9pc2UwMzA_size_16_color_FFFFFF_t_70]: /images/20220325/294afec14a82445a92b09a368d8b23c3.png
相关 堆和栈的区别 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放 迷南。/ 2022年08月20日 12:13/ 0 赞/ 192 阅读
相关 堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参 Dear 丶/ 2022年07月18日 00:24/ 0 赞/ 24 阅读
相关 堆和栈的区别 堆栈控件分配 栈(操作系统):由操作系统自动释放,存放函数的参数值,局部变量的值。其操作方式类似于数据结构中的栈。 堆(操作系统):一般由程序员分配释放,若程序员不释放 素颜马尾好姑娘i/ 2022年06月12日 20:57/ 0 赞/ 278 阅读
相关 堆和栈的区别 转载自:http://blog.csdn.net/hairetz/article/details/4141043 一、预备知识—程序的内存分配 一个由C/C++编 Love The Way You Lie/ 2022年06月02日 07:50/ 0 赞/ 250 阅读
相关 堆和栈的区别 原博地址:https://blog.csdn.net/qq\_35923749/article/details/79517397 https://blog.csdn.ne 你的名字/ 2022年05月20日 06:58/ 0 赞/ 502 阅读
相关 堆和栈的区别 在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分: Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空 逃离我推掉我的手/ 2022年05月14日 02:52/ 0 赞/ 275 阅读
相关 堆和栈的区别 The differences between the stack and the heap can be confusing for many people. So, we 分手后的思念是犯贱/ 2022年05月13日 00:04/ 0 赞/ 101 阅读
相关 栈和堆的区别 说起会了解这个东西,还是比较尴尬的,在学校里面老师一般不会讲解C++的堆和栈,大多数人了解的堆和栈是数据结构里面的概念,而这里一般面试官想问的是C++的内存分区管理方式。 首 蔚落/ 2022年03月25日 01:52/ 0 赞/ 323 阅读
相关 堆和栈的区别 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 一、预备知识——程序的内存分配 一个由C/C++编译的程 落日映苍穹つ/ 2022年01月14日 09:51/ 0 赞/ 369 阅读
相关 堆和栈的区别 栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。 堆是程序运行期间动态分配的内存空间,你可以根据程序的运行 ╰半夏微凉°/ 2021年12月21日 14:25/ 0 赞/ 332 阅读
还没有评论,来说两句吧...