网站站外推广的内外链接怎么做,深圳建设信息网站官网,响应式网站开发哪个好,北京页面设计的培训OS和CLR通常将用于容纳数据的内存划分为两个独立的区域#xff0c;每个区域都采用截然不同的方式来管理#xff1a;堆栈#xff08;Stack#xff09;和堆#xff08;heap#xff09;。#xff08;1#xff09; 调用一个方法时#xff0c;它的参数以及它的局部变…OS和CLR通常将用于容纳数据的内存划分为两个独立的区域每个区域都采用截然不同的方式来管理堆栈Stack和堆heap。1 调用一个方法时它的参数以及它的局部变量需要的内存总是从堆栈中获取方法结束后为参数和局部变量分配的内存将自动还给堆栈并可在另一个方法调用时重新使用。 2 使用new关键字和一次构造函数调用来创建一个对象时创建对象所需的内存总是从堆中获取使用引用变量同一个对象可以从几个地方引用对对象的最后一次引用消失以后对象使用的内存就可以供重用它可能没有被立即回收。 3 所有值类型都是在堆栈中创建的所有引用类型都是在堆中创建的。 2堆内存和堆栈内存 1堆栈内存就像一系列堆叠越高的箱子调用方法时每个参数都被放入一个箱子并将这个箱子放到堆栈的最顶部。每个局部变量也同样分配到一个箱子并同样放到堆栈最顶部方法结束后它的箱子都会从堆栈中移除。 2堆内存则像散布在房间里的一大堆箱子而不像堆栈那样每个箱子都严格重叠在另一个箱子上方每个箱子都有一个标签标记了这个箱子是否使用。创建一个对象时运行库会查找一个空箱子并把它分配给对象对对象的引用存储在堆栈上的一个局部变量中。运行库会跟踪对每一个箱子的引用数量一旦最后一个引用消失运行库就会将箱子标记为“未使用”吗将来某个时候会消除箱子里的东西使其真正的能够重用。堆内存是一种有限的资源如果堆内存被耗尽new操作将会抛出一个OutOfMemoryException对象创建失败。 3对上边理论的例子解释 例如 void Method(int param) { Circle c; Cnew Circle(param); …… } 假定传给param的值是42.。堆栈中将分配出一小片内存刚好能够存储一个int并使用值42来初始化在方法内部还要从堆栈中分配除另一小片内存它刚好能够存储一个引用只是暂时不初始化而已。接着需要从堆中分配一个足够大的内存区域来容纳一个Circle对象。这正是new关键字所执行的操作——它将运行Circle构造函数将这个原始的堆内存转换成一个Circle对象。 Circle构造函数也可能跑出一个异常在这中情况下分配给Circle对象的内存也会被回收而且构造函数返回的将是一个null引用。 下面画一个图来表示一下内存中的分配可能更清楚一些 转载于:https://www.cnblogs.com/loveyezi/archive/2012/11/23/2784274.html