美文网首页
C#内存分配

C#内存分配

作者: 暮卿寒 | 来源:发表于2018-08-14 20:33 被阅读0次

CLR内存分配分三大块区域:栈、GC堆、大对象堆。

一、线程堆栈(栈)

用于分配值类型实例。栈由操作系统进行管理,不受GC管理,当值类型不在其作用域(主要是指其所在函数内)时,其所占栈空间自动释放。栈的执行效率是非常高的。

二、GC堆(堆)

用于分配小对象实例。所谓小对象就是大小小于85000字节的实例对象。GC堆分三代垃圾进行管理,当进行GC操作(垃圾回收)时,垃圾收集器会对GC堆进行压缩回收。具体的GC操作(略)。

三、大对象堆(LOH)

用于分配大对象实例。大对象就是大小小于85000字节的实例对象。大对象分配在LOH上,不受GC控制,不会被压缩,只有在完全GC回收时才会被回收。

注意

a.栈的分配是向低地址扩展,而堆的分配是向高地址扩展。

b.值参数与引用参数的本质,值参数是对栈中数据的拷贝,引用参数则是对栈地址的引用。当值参数为某引用对象时,可以改变该引用对象某些值,但不能将值改变成新对象的地址。

c.堆中的对象都有同步块索引(占4个字节)、类型句柄(占4个字节)

d.静态字段、静态方法不和方法所分配的方式与区域-----方法表



参考
C语言之内存四区模型和函数调用模型
# C#基础之内存分配

# C# 深入理解堆栈、堆在内存中的实现

相关文章

  • C#内存分配

    CLR内存分配分三大块区域:栈、GC堆、大对象堆。 一、线程堆栈(栈) 用于分配值类型实例。栈由操作系统进行管理,...

  • unity一些点

    C#基础之内存分配https://www.cnblogs.com/fangyz/p/5538076.html C#...

  • Note1:C# OpenProcess

    在使用c#进行虚拟内存分配的时候出现拒绝访问 貌似是没有调用OpenProcess方法,不调用但是这种情况只是偶尔...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • docker 的资源分配

    内存分配 -m 或者--memory :分配内存--memory-swap:分配临时内存docker run -i...

  • Java中四种引用

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • Java编程语言:java中四种引用!欢迎补充

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • 回顾JVM内存分配

    回顾JVM内存分配回顾JVM内存分配

网友评论

      本文标题:C#内存分配

      本文链接:https://www.haomeiwen.com/subject/bekbbftx.html