48365365体育投注

时间:2019-05-16 01:06  编辑:admin
展开全部
首先,堆栈和堆(管理堆)位于进程的虚拟内存中。
(每个进程的虚拟内存在32位处理器上为4 GB。)值的类型存储在堆栈中。
堆栈实际上是向下填充的。也就是说,它填充了指向本地存储器地址的高端存储器地址。
堆栈首先分配内存变量然后释放它们(高级输出原理)。
堆栈变量从下到上发布,以确保堆栈的高级规则不会与变量的生命周期冲突。
堆栈性能非常好,但由于它对所有变量都不是非常灵活,因此需要嵌套可变生命周期。
通常,我们希望使用一种方法来分配内存来存储数据,并且在方法出来后数据可以继续使用很长时间。
目前使用堆(管理堆)。
堆(管理堆)堆的堆(管理堆)存储引用类型。
这座山并不多。
.NET的堆由垃圾收集器自动管理。
与堆栈不同,堆栈从下到上分配,因此可用空间位于所使用的空间之上。
例如,创建一个对象。cus = newCustomer();声明客户参考帐户并为堆栈中的此引用分配存储空间。
这只是一个参考,而不是客户的真实目的。
Cus占用4个字节的空间,并包含用于存储客户端的参考地址。
堆中的内存被分配用于存储Client对象的实例,假设Client对象的实例是32个字节,以便在存储Client对象实例的堆中定位存储位置。
?NET运行时在堆中搜索第一个32字节的连续块,该块不用于存储Customer对象的实例。
接下来,将分配给Client对象实例的地址分配给变量cus。
从这个例子可以看出,建立对象引用的过程比建立值变量的过程更复杂,并且无法避免性能下降。
实际上是。
NET运行时保存对状态信息。随着新数据添加到堆中,堆栈中的引用变量也会更新。
很多性能损失!
有一种机制可以分配可变内存而不受限于堆栈。将引用变量的值分配给相同类型的变量,然后使两个变量引用同一堆中的对象。
当应用程序变量超出范围时,它将从堆栈中删除。
但是,引用对象中的数据将保留在堆上,直到程序终止,或者变量未应用该数据,并且垃圾收集器将其删除。