C# 变量的内存地址
是否可以在C#中获取变量的内存地址 我想做的很简单。我想声明Double类型的变量, 浮点、十进制,并将值1.1分配给每个变量。那么我想 去看看这些值在内存中是如何表示的。我需要记忆 以查看变量的地址如何存储在内存中。一旦我有了 内存地址我计划在代码中加一个断点,并使用Debug->Windows->memory 选项以查看数字如何存储在内存中C# 变量的内存地址,c#,memory,variables,C#,Memory,Variables,是否可以在C#中获取变量的内存地址 我想做的很简单。我想声明Double类型的变量, 浮点、十进制,并将值1.1分配给每个变量。那么我想 去看看这些值在内存中是如何表示的。我需要记忆 以查看变量的地址如何存储在内存中。一旦我有了 内存地址我计划在代码中加一个断点,并使用Debug->Windows->memory 选项以查看数字如何存储在内存中 干杯,如果您只想看看内存中的内容是如何表示的,那么请使用将返回字节数组的类。你可以在C#中得到变量的地址,但这可能没有多大意义 当然,BitConver
干杯,如果您只想看看内存中的内容是如何表示的,那么请使用将返回字节数组的类。你可以在C#中得到变量的地址,但这可能没有多大意义
当然,BitConverter不处理小数,所以您可以使用“调试内存”窗口,在变量范围内使用语法
&varname
,它会为您计算出地址。同意泰兰德,在内部,它们将以位的形式重新呈现,并且获取它们的内存地址不会起任何作用。另一方面,您可以使用ILDASM检查编译器对C代码中指定的值所生成的实际类型。
如果您通过ILDasm检查IL代码,那么这就是C#编译器为上述偏差生成的代码:-
//000012: double d1 = 21.1;
IL_0001: ldc.r8 21.100000000000001
..............
//000013: decimal d2 = 22.1M;
IL_000b: ldc.i4 0xdd
...............
//000014: float d3 = 21.1F;
IL_001a: ldc.r4 21.1
在这里,您可以看到十进制在内部表示为十六进制数。是的,可以获得指向C#中存储器的原始指针。我建议您阅读《C#规范》第18章的全部内容,而不是在这里对其进行解释,该章详细讨论了这一主题 但是,如果您想了解各种不同的浮点类型如何存储值,有比在调试器中查看它们更简单的方法。这些都是记录良好的格式;您可以在维基百科或msdn中查找它们,并了解它们在内存中的布局 十进制值的二进制表示法由1位符号、96位整数和用于除以96位整数并指定其中哪部分是小数的比例因子组成。比例因子隐式为数字10,其指数范围为0到28 有关详细信息,请参阅 double的二进制表示是一个符号位,11个指数位表示从-1022到+1023的指数,52个尾数位被解释为“1”,后跟52个位 请参阅或我的浮点问题系列文章:
浮点与双精度浮点相同,只是大小的一半:一个符号位,8个指数位,23个尾数位。有关详细信息,请参阅。感谢您抽出时间回答。感谢您抽出时间回答。感谢您抽出时间回答。
//000012: double d1 = 21.1;
IL_0001: ldc.r8 21.100000000000001
..............
//000013: decimal d2 = 22.1M;
IL_000b: ldc.i4 0xdd
...............
//000014: float d3 = 21.1F;
IL_001a: ldc.r4 21.1