解决方案 »
- 关于LINQ的一个问题!疑点看红色字体这行!
- C# 访问远程数据库菜鸟问
- c#异步tcp编程多客户端文件传输,只能一个客户端接收数据
- 如何在二分法查找结果中输出和所要查找的最接近的数
- 在WinForm程序中对用户控件绘制图形(比如线型)线与水平线呈45度角时用户控件会变的模糊
- 100分求问如何用C#程序进行以16进制修改文件
- 请教关于TreeView拖放操作的用法。我只有30分了。也只能给30分。
- 有用过componetOne的C1DataSet的请进
- 在C#中怎样用RSA加密数据?
- 如何访问internet上的SQL2000
- C#打包应用程序时候出现一点小问题
- c# visio2010二次开发 求大神们指导一下 相关资料太少
p1.name是string类型,string是特殊的引用类型,.net 下string使用池技术来实现字符串的 ,p1.name是个引用而已指向了字符串池中一个字符串。
另外.net是先要编译喂il代码,运行时再编译为机器代码运行的,机器代码不存在什么class ,类型之类的概念,il如何编译,微软并不公开,所以他的内存地址是否连续,对象如何映射到机器码,我无法回答你!
p1.age=10;
p1.name="abcd";p1,p2只是个引用而已
如果没有p1 = new Person();
p1.age=10;
p1.name="abcd";这两句会报错的你应该不会这门语言吧,先从基础的看起吧~~
p1.age=10在GC HEAP中,
而
p1.name="abcd"存在于system domain 中的global string literal table
你可以用VS或者windbg把那个instance的内存打印出来验证嘛
你也可以认为它是不连续的。有什么关系呢?高级语言的特点就在于,不管编译器因为不同的目标平台(例如x86和ARM)、不同操作系统(例如windows xp、windows 8和linux)差别有什么不同版本,不管底层发生什么样的巨变,高层次的运行结果都一致性不变。
{
public int age;
public int name;
} static unsafe void Main(string[] args)
{
Person p1=new Person();
p1.age = 10;
p1.name = 11;
fixed (int* page = &p1.age)
fixed (int* pname =&p1.name)
{
Console.WriteLine((int)page);
Console.WriteLine((int)pname);
}
Console.ReadKey();
}
00000033 mov ecx,562774h
00000038 call FFF0FBF0
0000003d mov dword ptr [ebp-48h],eax
00000040 mov ecx,dword ptr [ebp-48h]
00000043 call FFF2A350
00000048 mov eax,dword ptr [ebp-48h]
0000004b mov dword ptr [ebp-44h],eax
p.age = 1;
0000004e mov eax,dword ptr [ebp-44h]
00000051 mov dword ptr [eax+8],1
p.name = "la";
00000058 mov eax,dword ptr ds:[030521CCh]
0000005e mov edx,dword ptr [ebp-44h]
00000061 lea edx,[edx+4]
00000064 call 6F66F6D0
我看不懂,我们学校没学过这个,不知道有没有用,哪位大神指点一下