浅谈对象的内存分配及对象的成员的访问(三)--方法的内存分配

本文探讨了CLR中方法的内存分布方式,包括方法如何在内存中被分配地址及调用过程,解释了JIT编译器的角色以及方法实现的加载机制。
以前的文章已经介绍了对象在内中的分布,但是我们知道讨论了对象中成员字段的分布,今天我们来讨论方法的分布。
   首先我们要搞清的一个基本的概念就是成员方法的内存分布和内存的对象的肯定有很大的差距,为什么呢?因为从以前的解释中我们很容易理解成员字段在内存中只不过是会用到一个固定大小的空间,比如整型就是4个字节、float也是4个字节,自定义的类型也只会占一个整型大小来保存引用的地址,但是方法不一样,它不是类型,所以CLR没有办法检测到它的具体大小,没有把办法给他分配空间,那么方法到底在内存中怎么分配呢?
   在讲述分配之前我们还要在讨论下JIT是如何来调用我们的方法的,有如下的代码:
public class BaseClass
{
   ....
   public string test = "Test";  
   public void Method()
   {
     Console.WriteLine("这是一个方法!");
   }
   public void Method(string str)
   {
     Console.WriteLine("这是一个重载方法!");
   }
}
public class MainClass
{
   //程序的入口点
   public static void Main()
   {
     BaseClass bc = new BaseClass();
     bc.Method(); //方法调用
   }
}
在Main方法执行之前,CLR会首先检测出Main方法中用到的所有的类型,我们这里用到的类有自己定义的Baseclass,然后CLR会在内中分配一块内存来保存BaseClass中使用到的每一个方法,但是不会保存方法的实现(要是把每个方法的实现都保存进去,那内存就吃不消了,比如Console的WriteLine方法有多少个重载啊,但是我们往往使用的只有其中一个,如果几十个方法的内容都放到内中,那就亏大了),这里我们可以理解为保存就是方法的一个空架子(但是这个空架子中有一个未文档化的函数,我们称为JITCompiler),但是值得我们注意的是每个方法都会有一个地址。当开始调用其中的某一个方法时,根据这个地址可以在CLR分配的用于保存方法的内存中找到我们想要调用的方法,然后在这个空架子中的JITCompiler就会将指定的方法的IL内容编译成CPU指令,然后CPU执行这些指令方法就执行了,如图:

经过上面的分析,我们就可以这么理解了,其实对象实例化以后,方法也会在堆中有所体现,那就是一个地址,一个保存CLR在内存中分配的保存类型中所有方法的地址,因为类型中可能会有很多方法,为了便于操作和理解,我们这块CLR分配的内存理解成一个表,那么其中的每个方法就是一条记录,如上图。于是我们在以前分析出的对象在内存中的分布图就变了些样子,如BaseClass bc = new BaseClass()的内存分布就变成了下面的样子:
  
内容概要:本文是一篇关于使用RandLANet模型对SensatUrban数据集进行点云语义分割的实战教程,系统介绍了从环境搭建、数据准备、模型训练与测试到精度评估的完整流程。文章详细说明了在Ubuntu系统下配置TensorFlow 2.2、CUDA及cuDNN等深度学习环境的方法,并指导用户下载和预处理SensatUrban数据集。随后,逐步讲解RandLANet代码的获取与运行方式,包括训练、测试命令的执行与参数含义,以及如何监控训练过程中的关键指标。最后,教程涵盖测试结果分析、向官方平台提交结果、解读评估报告及可视化效果等内容,并针对常见问题提供解决方案。; 适合人群:具备一定深度学习基础,熟悉Python编程和深度学习框架,从事计算机视觉或维点云相关研究的学生、研究人员及工程师;适合希望动手实践点云语义分割项目的初学者与进阶者。; 使用场景及目标:①掌握RandLANet网络结构及其在点云语义分割任务中的应用;②学会完整部署一个点云分割项目,包括数据处理、模型训练、测试与性能评估;③为参与相关竞赛或科研项目提供技术支撑。; 阅读建议:建议读者结合提供的代码链接和密码访问完整资料,在本地或云端环境中边操作边学习,重点关注数据格式要求与训练参数设置,遇到问题参考“常见问题与解决技巧”部分及排查。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值