C# 内存管理
2023-09-14 09:02:13 时间
Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在64位处理器上,这个数字会更大。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有DLL,以及程序运行时使用的所有变量的内容。这个4GB的内存
C/C++【内存管理】 C++中的内存管理机制和C语言是一样的,但在具体内存管理函数上,C语言的malloc已经无法满足C++面向对象销毁的需求,于是祖师爷在C++中新增了一系列内存管理函数,即 new 和 delete 著名段子:如果你还没没有对象,那就尝试 new 一个吧
Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在64位处理器上,这个数字会更大。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有DLL,以及程序运行时使用的所有变量的内容。这个4GB的内存称为虚拟地址空间,或虚拟内存。
4GB中的每个存储单元都是从0开始往上排序的。要访问存储在内存的某个空间中的一个值,就需要提供表示该存储单元的数字。在任何复杂的高级语言中,如VB、C#和Java,编译器负责把人们可以理解的变量名转换为处理器可以理解的内存地址。
在进程的虚拟内存中 ,有一个区域称为栈。栈存储不是对象成员的值数据类型。另外,在调用一个方法时 ,也使用栈存储传递给方法的所有参数的副本 。
栈指针(操作系统维护的一个变量表示栈中下一个空闲存储单元的地址。程序第一次开始运行时,栈指针指向为栈保留的内存块末尾。栈实际上是向下填充的,即从高内存地址向低内存地址填充。当数据入栈后,栈指针就会随之调整,以始终指向下一个空闲存储单元。这种情况如图13-1所示。在该图中,显示了栈指针8O000(十六进制的OxC3500),下一个空闲存储单元是地址799999。
注意,与栈不同,堆上的内存是向上分配的,所以空闲空间在已用空间的上面。
整理自:C#高级编程
拓展阅读:
.Net 垃圾回收机制原理(一)
.Net 垃圾回收机制原理(二)
.Net 垃圾回收和大对象处理
.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
C/C++【内存管理】 C++中的内存管理机制和C语言是一样的,但在具体内存管理函数上,C语言的malloc已经无法满足C++面向对象销毁的需求,于是祖师爷在C++中新增了一系列内存管理函数,即 new 和 delete 著名段子:如果你还没没有对象,那就尝试 new 一个吧
相关文章
- 为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但将 C 和 C++ 置于一边
- 用C#编写一个停放在任务栏上的图标程序
- C#中的委托和事件学习(续)
- 使用C#调用系统API实现内存注入的代码
- c#中两种不同的存储过程调用与比较
- C#常用正则大全分享
- C#中方括号[]的语法及作用介绍
- 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法
- C#中跨线程访问控件问题解决方案分享
- C#正则表达式分解和转换IP地址实例(C#正则表达式大全c#正则表达式语法)
- c#基础之数组与接口使用示例(遍历数组二维数组)
- 解析C#中[],List,Array,ArrayList的区别及应用
- C#WinForm应用程序降低系统内存占用方法总结