.Net 7里的函数.Ctor和.CCtor是干啥用的呢?你知道吗

本文深入探讨了.Net 7中.Ctor和.CCtor的功能,通过底层运行模型(汇编)分析它们在对象实例化过程中的角色。.Ctor是非静态默认构造函数,在示例中并未执行任何操作;而.CCtor则是用于初始化静态全局变量,确保它们在类的静态构造函数中被正确赋值。
摘要由CSDN通过智能技术生成

楔子

有小伙伴被面试官问到这个问题,本篇彻底解析下这个问题。

为了彻底点,注意本篇是最底层的.Net 7 RC CLR运行模型(汇编)为基础进行全局剖析,局部业务分析。

如有疏漏,请斧正。QQ:676817308.公众号:江湖评谈

目的非手段

这两个函数比较特殊的存在,.Ctor是非静态默认实例化。.CCtor是静态默认实例化。这两个函数伴随着.Net 任何对象的实例化都自动存在于这个对象当中。

跟踪.CCtor可以在全局静态对象下断点,观察它的里面运行。
跟踪.Ctor可以通过!name2ee 模块 模块.类名..Ctor找到JITTED Code Address,观察它的运行。正如本段题所说,这只是手段,不是目的。所以下面看目的。

.Ctor目的

先来看下非静态默认构造函数.Ctor。上一段代码:

internal class Program
    {
        public class ABC
        {
        }
        static void Main(string[] args)
        {
            ABC abc = new ABC();
            Console.ReadLine();
        }
    }

直接给它反编译:

00007FFDF2FA03B0 55                   push        rbp  
00007FFDF2FA03B1 48 83 EC 40          sub         rsp,40h  
00007FFDF2FA03B5 48 8D 6C 24 40       lea         rbp,[rsp+40h]  
00007FFDF2FA03BA C5 D8 57 E4          vxorps      xmm4,xmm4,xmm4  
00007FFDF2FA03BE C5 FA 7F 65 E8       vmovdqu     xmmword ptr [rbp-18h],xmm4  
00007FFDF2FA03C3 33 C0                xor         eax,eax  
00007FFDF2FA03C5 48 89 45 F8          mov         qword ptr [rbp-8],rax  
00007FFDF2FA03C9 48 89 4D 10          mov         qword ptr [rbp+10h],rcx  
00007FFDF2FA03CD 83 3D BC E9 19 00 00 cmp         dword ptr [7FFDF313ED90h],0  
00007FFDF2FA03D4 74 05                je          00007FFDF2FA03DB  
00007FFDF2FA03D6 E8 B5 BF 79 5E       call        JIT_DbgIsJustMyCode (07FFE5173C390h)  
00007FFDF2FA03DB 90                   nop  
00007FFDF2FA03DC 48 B9 30 F6 5B F3 FD 7F 00 00 mov         rcx,7FFDF35BF630h  
00007FFDF2FA03E6 E8 75 7C C1 5E       call        JIT_TrialAllocSFastMP_InlineGetThread (07FFE51BB8060h)  
00007FFDF2FA03EB 48 89 45 F0          mov         qword ptr [rbp-10h],rax  
00007FFDF2FA03EF 48 8B 4D F0          mov         rcx,qword ptr [rbp-10h]  

// 这个地方是调用了.Ctor
00007FFDF2FA03F3 FF 15 0F 8D 60 00    call        qword ptr [7FFDF35A9108h]  

00007FFDF2FA03F9 48 8B 45 F0          mov         rax,qword ptr [rbp-10h]  
00007FFDF2FA03FD 48 89 45 F8          mov         qword ptr [rbp-8],rax  
00007FFDF2FA0401 FF 15 A9 93 60 00    call        qword ptr [7FFDF35A97B0h]  
00007FFDF2FA0407 48 89 45 E8          mov         qword ptr [rbp-18h],rax  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值