变量的内存地址
是否可以在C#中获取变量的内存地址。变量的内存地址
我想要做的事很简单。我想声明Double类型的变量, Float,Decimal,并将值1.1分配给这些变量中的每一个。然后我想 去看看这些值如何表示在内存中。我需要获取变量的内存地址 以便了解它如何存储在内存中。一旦我有了 内存地址,我打算在代码中放置一个断点,并在Visual Studio中使用Debug - > Windows - > Memory 选项来查看数字如何存储在内存中。
干杯,
是的,有可能获得一个原始指针存储在C#中。我建议您阅读C#规范的第18章,详细讨论这个主题,而不是试图在这里解释它。然而,如果你想要做的是学习各种不同的浮点类型如何存储值,有比在调试器中查看它们更简单的方法。这些都是有据可查的格式;你可以在*或MSDN中查看它们,并阅读它们在内存中的布局。
Decimal值的二进制表示形式由一个1位符号,一个96位整数和一个缩放因子组成,用于分割96位整数并指定它的哪一部分是小数部分。缩放因子隐含地是数字10,被提升至从0到28的指数。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.decimal.aspx。
双精度的二进制表示是一个符号位,表示从-1022到+1023的指数的11个指数位,以及解释为“1”的52位尾数。接着是52位。
见http://en.wikipedia.org/wiki/Double_precision或我的浮点问题的系列文章:http://blogs.msdn.com/ericlippert/archive/tags/Floating+Point+Arithmetic/default.aspx
浮子一样了一倍,只是一半大小:一个符号位,8个指数位,23位尾数。详情请参阅http://en.wikipedia.org/wiki/Single_precision_floating-point_format。
如果你只是想看到的事情是如何被记忆所代表然后使用BitConverter类,这将给你回一个字节数组。你可以在C#中获得变量的地址,但是可能是没有太大意义。
当然BitConverter不处理小数,所以你可以做的就是使用调试内存窗口,并在变量的作用域中使用语法&varname
,它会为你找到地址。
感谢您花时间回答。 – user310616 2010-04-09 08:53:20
同意tyranid,他们在内部他们将被重新表示,并且让他们的内存地址不起任何作用。在另一方面,你可以使用ILDASM检查你在C#code.Consider指定以下用C#decleration由编译器的值产生的实际类型: -
double d1 = 21.1;
decimal d2 = 22.1M;
float d3 = 21.1F;
如果通过ILDASM检查IL代码,然后这是由C#编译器生成什么上述decleration: -
//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
在这里你可以看到,小数内部表示为十六进制数。
感谢您花时间回答。 – user310616 2010-04-09 08:53:48
感谢您花时间回答。 – user310616 2010-04-09 08:52:13