当前位置:  编程技术>.net/c#/asp.net

C#之CLR内存原理初探

    来源: 互联网  发布时间:2014-10-31

    本文导语:  本文初步讲述了C#的CLR内存原理。这里所关注的内存里面说没有寄存器的,所以我们关注的只有托管堆(heap),栈(stack), 字符串常量池(其中string是一个很特殊的对象) 首先我们看两个方法: void M1() { string name = "Tom"; M2(...

本文初步讲述了C#的CLR内存原理。这里所关注的内存里面说没有寄存器的,所以我们关注的只有托管堆(heap),栈(stack), 字符串常量池(其中string是一个很特殊的对象)

首先我们看两个方法:

void M1()
{
 string name = "Tom";
 M2(name);
}

void M2(string name2)
{
 int length = 10;
 double rate = 10.0;
 name2 = "Joe";
 return;
}

这里我们有一个M1的方法,初始化一个name局部变量,然后调用M2..............

如下图所示先来看看M1的运行原理:

首先在一个最基本的方法中,应包含一些“prologue"代码(不用我们管,编译自动生成的),负责在方法开始做它的工作之前进行初始化,还应有一些"epilogue"代码,负责在方法完成的时候进行清理,然后才返回调用者。M1开始是,它的"prologue"代码在线程栈上分配局部变量name的内存,它被负值了TOM,Tom这个字符串在字符串常量池。M1调用M2,将局部变量name作为一个实参来传递。这造成name局部变量中的地址被压入栈。在M2方法内部,将使用名为name2参数变量来标识栈位置。另外,调用一个方法时,还会将一个“返回地址”压入栈。被调用的方法在结束以后应该返回到这个位置(调用的位置)。

接着再来看看下图所示M2的运行原理:

M2的"prologue"代码为length和rate进行内存的分配,然后M2代码开始执行代码。最终,M2抵达它的return语句,造成CPU的指令指针被设置成栈中的返回地址(就说我们图中的{返回地址});

注:这里特别要提一下的说name2,name2在调用的时候已经变成参数压入了栈,所以这里只是对这里的地址进行重新指向,string的内存玩法可以看字符串常量池的相关介绍。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt.color类colorspace的类成员方法: type_8clr定义及介绍
  • 求助:各位大哥为什么会出现这样的错误啊(ioctl: LOOP_CLR_FD: 设备或资源忙)谢谢!
  • java命名空间java.awt.color类colorspace的类成员方法: type_2clr定义及介绍
  • sql2005中创建CLR存储过程的方法详解
  • java命名空间java.awt.color类colorspace的类成员方法: type_7clr定义及介绍
  • 在SQL Server 2005中创建CLR存储过程的详细介绍
  • java命名空间java.awt.color类colorspace的类成员方法: type_4clr定义及介绍
  • java命名空间java.awt.color类colorspace的类成员方法: type_5clr定义及介绍
  • java命名空间java.awt.color类colorspace的类成员方法: type_3clr定义及介绍
  • java命名空间java.awt.color类colorspace的类成员方法: type_6clr定义及介绍
  • java命名空间java.awt.color类colorspace的类成员方法: type_9clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace3clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace4clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace5clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace6clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace7clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace8clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace9clr定义及介绍
  • java命名空间java.awt.color类icc_profile的类成员方法: icsigspace2clr定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3