C# 内存管理
2015-07-24 18:31
357 查看
Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在64位处理器上,这个数字会更大。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有DLL,以及程序运行时使用的所有变量的内容。这个4GB的内存称为虚拟地址空间,或虚拟内存。
4GB中的每个存储单元都是从0开始往上排序的。要访问存储在内存的某个空间中的一个值,就需要提供表示该存储单元的数字。在任何复杂的高级语言中,如VB、C#和Java,编译器负责把人们可以理解的变量名转换为处理器可以理解的内存地址。
在进程的虚拟内存中 ,有一个区域称为栈。栈存储不是对象成员的值数据类型。另外,在调用一个方法时 ,也使用栈存储传递给方法的所有参数的副本 。
栈指针(操作系统维护的一个变量表示栈中下一个空闲存储单元的地址。程序第一次开始运行时,栈指针指向为栈保留的内存块末尾。栈实际上是向下填充的,即从高内存地址向低内存地址填充。当数据入栈后,栈指针就会随之调整,以始终指向下一个空闲存储单元。这种情况如图13-1所示。在该图中,显示了栈指针8O000(十六进制的OxC3500),下一个空闲存储单元是地址799999。
注意,与栈不同,堆上的内存是向上分配的,所以空闲空间在已用空间的上面。
整理自:C#高级编程
拓展阅读:
.Net 垃圾回收机制原理(一)
.Net 垃圾回收机制原理(二)
.Net 垃圾回收和大对象处理
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
4GB中的每个存储单元都是从0开始往上排序的。要访问存储在内存的某个空间中的一个值,就需要提供表示该存储单元的数字。在任何复杂的高级语言中,如VB、C#和Java,编译器负责把人们可以理解的变量名转换为处理器可以理解的内存地址。
在进程的虚拟内存中 ,有一个区域称为栈。栈存储不是对象成员的值数据类型。另外,在调用一个方法时 ,也使用栈存储传递给方法的所有参数的副本 。
栈指针(操作系统维护的一个变量表示栈中下一个空闲存储单元的地址。程序第一次开始运行时,栈指针指向为栈保留的内存块末尾。栈实际上是向下填充的,即从高内存地址向低内存地址填充。当数据入栈后,栈指针就会随之调整,以始终指向下一个空闲存储单元。这种情况如图13-1所示。在该图中,显示了栈指针8O000(十六进制的OxC3500),下一个空闲存储单元是地址799999。
注意,与栈不同,堆上的内存是向上分配的,所以空闲空间在已用空间的上面。
整理自:C#高级编程
拓展阅读:
.Net 垃圾回收机制原理(一)
.Net 垃圾回收机制原理(二)
.Net 垃圾回收和大对象处理
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
相关文章推荐
- c#调用COM组件
- 【DevOps】为什么我们永远疲于奔命?
- 网络管理之IP地址篇
- IE7降低内存和降低CPU的几个技巧
- 文件的读出 编辑 管理
- C#实现把指定数据写入串口
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#实现基于链表的内存记事本实例
- C#托管堆对象实例包含内容分析