怎样理解c#中的堆和栈?

如题所述

简单的可以理解为:
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。

一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-03
打一个简单的比方,“栈”就是去饭馆吃饭,只要你点了菜,后面的厨师会为你做饭,服务员给你上菜,然后吃完饭你直接走就行了,剩饭垃圾交给饭馆来处理。
而“堆”是你自己在家做饭,由你决定吃什么,然后自己去买菜,做饭,吃完饭后自己收拾剩下的东西,该仍的就扔到垃圾桶里。一个通俗的比喻,应该能讲明白堆和栈的内存的分配以及回收机制了吧。

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

C#中堆栈和堆是什么? 遍历又是什么,有什么用处。
数据结构方面的堆和栈,这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足后进先出的性质的数学或数据结构。遍历就是按照一定的顺序,从头到尾将存储的数据(链表中、堆中、栈中)访问一遍。遍历的用处简单的说就是通过遍历找到合适的结点或...

关于C#堆与栈区别
C#中的堆(heap)是你实例化对象时,存放对象本体的地方;而栈(Stack)是函数调用时,存放传递函数参数以及函数内数值变量的地方;例子:MyClass c1 = new MyClass;MyClass c2 = c1;在堆中建立一个MyClass(对象本体在堆中)然后将对该对象的引用放入(赋值)给c1;然后再让c2引用同一个在堆中的...

c#堆和栈的区别
首先堆栈和堆(托管堆)都在进程的虚拟内存中。(在32位处理器上每个进程的虚拟内存为4GB)堆栈stack 堆栈中存储值类型。堆栈实际上是向下填充,即由高内存地址指向地内存地址填充。堆栈的工作方式是先分配内存的变量后释放(先进后出原则)。堆栈中的变量是从下向上释放,这样就保证了堆栈中先进后出的...

专题|堆、栈简介
程序员的基本功之一,要理解堆和栈的区别。堆和栈,虽然经常被混淆,但它们是内存管理的两个不同概念。堆堆是程序员可控的内存区域,用于动态分配内存,尤其在不明确数据存储时间或大小时。虽然效率略低于栈,但堆的灵活性更高,因为编译器不需要预先知道内存需求。C#中,值类型有时也会在堆上存储,如...

C#中栈和堆怎么定义
栈当中存放的是值类型,如int,decimal,double,enum等 堆当中存放的是引用类型,如string,类等 如图,如果定义一个int类型的变量i:int i = 5;那么在内存中的实际情况是:直接在栈中存放i的值5.如果顶一个string类型的变量s:string s = "A string.";那么在内存中的实际情况是:在堆中存放s的...

求名词解释:C#中的托管堆,堆栈,堆,栈
其实堆栈说法有点那啥···也就是栈,后进先出(也有说先进后出的)堆,就比较难表达,他是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆...

2021春招C#.NET笔试题基础篇 (原题+详解答案)
1. C#中堆和栈的区别?栈:由编译器自动管理,存储顺序为先进后出。存放在栈中时,元素遵循栈顶元素先入先出的原则。堆:由程序员管理,存储无序,是不连续的内存域。使用new、malloc等分配内存函数得到的内存位于堆上。栈内存无需管理,不受垃圾回收器管理。堆内存需要垃圾回收器定期清理。值类型在...

堆栈 在C语言中看到的,是什么东西啊.有什么作用啊,怎么用?
“堆栈”实际上是分为两部分:堆是指系统可以动态申请和释放的一部分究竟,这部分是可以用代码进行操作的。栈是函数之间调度所使用的一部分空间,这部分在代码上没有明显的表示。对于堆来与,可以使用malloc、realloc语句进行申请空间,通常情况下申请得到的是堆空间中的一块区域,而通常情况下定义的数组也...

堆和栈的区别 还有什么建立在堆上 什么建立在栈上
第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。2.7小结:堆和栈的区别可以用如下的比喻来看出:使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗...

相似回答