C# 内存管理

简介: Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在64位处理器上,这个数字会更大。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有DLL,以及程序运行时使用的所有变量的内容。这个4GB的内存

Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在64位处理器上,这个数字会更大。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有DLL,以及程序运行时使用的所有变量的内容。这个4GB的内存称为虚拟地址空间,或虚拟内存。

4GB中的每个存储单元都是从0开始往上排序的。要访问存储在内存的某个空间中的一个值,就需要提供表示该存储单元的数字。在任何复杂的高级语言中,如VB、C#和Java,编译器负责把人们可以理解的变量名转换为处理器可以理解的内存地址。

在进程的虚拟内存中 ,有一个区域称为栈。栈存储不是对象成员的值数据类型。另外,在调用一个方法时 ,也使用栈存储传递给方法的所有参数的副本 。 

栈指针(操作系统维护的一个变量表示栈中下一个空闲存储单元的地址。程序第一次开始运行时,栈指针指向为栈保留的内存块末尾。栈实际上是向下填充的,即从高内存地址向低内存地址填充。当数据入栈后,栈指针就会随之调整,以始终指向下一个空闲存储单元。这种情况如图13-1所示。在该图中,显示了栈指针8O000(十六进制的OxC3500),下一个空闲存储单元是地址799999。

注意,与栈不同,堆上的内存是向上分配的,所以空闲空间在已用空间的上面。

整理自:C#高级编程

拓展阅读:

        .Net 垃圾回收机制原理(一)
.Net 垃圾回收机制原理(二)  
.Net 垃圾回收和大对象处理          
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

目录
相关文章
|
1月前
|
存储 程序员 编译器
C++内存管理
C++内存管理
|
1月前
|
存储 程序员 C语言
【C++】| C/C++内存管理
【C++】| C/C++内存管理
|
1月前
|
存储 编译器 程序员
【C++】内存管理
【C++】内存管理
|
4月前
|
C语言 C++ Windows
【C++】:内存管理
【C++】:内存管理
35 0
|
5月前
|
编译器 程序员 C语言
|
9月前
|
算法
操作系统概论——内存管理
操作系统概论——内存管理
44 0
|
10月前
|
存储 算法 程序员
内存管理
本文主要是从操作系统的角度了解文件管理的内容。
140 1
内存管理
|
11月前
|
存储 编译器 Linux
【C++】C&C++内存管理
【C++】C&C++内存管理
|
11月前
|
存储 算法 NoSQL
第4章 内存管理
第4章 内存管理
331 0
第4章 内存管理
|
存储 编译器 C语言
C/C++【内存管理】
C++中的内存管理机制和C语言是一样的,但在具体内存管理函数上,C语言的malloc已经无法满足C++面向对象销毁的需求,于是祖师爷在C++中新增了一系列内存管理函数,即 new 和 delete 著名段子:如果你还没没有对象,那就尝试 new 一个吧
127 0
C/C++【内存管理】