当前位置:  开发笔记 > 编程语言 > 正文

在c#中分配引用时添加神秘调用

如何解决《在c#中分配引用时添加神秘调用》经验,为你挑选了0个好方法。

我知道其他人写了类似的问题,但我认为我的情况不同,因为我找不到任何解决方案.

我有一个对象赋值,这个非常简单:

_buffer3 = buffer; //they are just simple reference types

生成的汇编代码如下

 mov         edx,dword ptr [ebp-3Ch] 
 mov         eax,dword ptr [ebp-40h] 
 lea         edx,[edx+4] 
 call        69C322F0 

现在,只是为了理解发生了什么,我想进入呼叫(为什么要在分配中使用呼叫?).但是,该地址的代码不存在,我无法介入.如果我在地址代码字段中键入地址,那就是显示的内容:

69C322F0  ???  

试图解决这个问题的任何帮助?:)

编辑..显然,当在类的方法内分配引用时,会添加神秘的调用.

如果我有这个课程:

        private class Test
        {
            int _X;
            int _Y;
            Test _t;

            public void SetValues(int x, int y, Test t)
            {
                _X = x;
                _Y = y;
            }
        }

为方法SetValues生成的程序集是:

                _X = x;
00000028  mov         eax,dword ptr [ebp-3Ch] 
0000002b  mov         edx,dword ptr [ebp-40h] 
0000002e  mov         dword ptr [eax+8],edx 
                _Y = y;
00000031  mov         eax,dword ptr [ebp-3Ch] 
00000034  mov         edx,dword ptr [ebp+0Ch] 
00000037  mov         dword ptr [eax+0Ch],edx 

这是有道理的

但是,如果我写这个

        private class Test
        {
            int _X;
            int _Y;
            Test _t;

            public void SetValues(int x, int y, Test t)
            {
                _X = x;
                _Y = y;
                _t = t;
            }
        }

神秘的电话出现了

                _X = x;
00000028  mov         eax,dword ptr [ebp-3Ch] 
0000002b  mov         edx,dword ptr [ebp-40h] 
0000002e  mov         dword ptr [eax+8],edx 
                _Y = y;
00000031  mov         eax,dword ptr [ebp-3Ch] 
00000034  mov         edx,dword ptr [ebp+0Ch] 
00000037  mov         dword ptr [eax+0Ch],edx 
                _t = t;
0000003a  mov         edx,dword ptr [ebp-3Ch] 
0000003d  mov         eax,dword ptr [ebp+8] 
00000040  lea         edx,[edx+4] 
00000043  call        515E2E48 

恕我直言,它与垃圾收集有关,但我无法理解它是什么,我真的想弄明白.我知道有人必须知道:)

答案的附录,这是我通过C#从书籍CLR中获取的摘录:

这是我从本书的Google Books中摘录的:CLR来自C#

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有