当前位置:编程学习 > C#/ASP.NET >>

c#中一个int类型变量的值存放在哪里?

比如 int a=3;
那么这个3存放在System.Int32结构的什么地方呢?
更明确地说,根据msdn的说明,System.Int32的内容是17个方法,两个字段(publicconstint MaxValue 和publicconstint MinValue),以及对一些接口的实现。没有一个字段是储存数值的。那么我的问题就是这个int a=3中的3存放在哪里?


附msdn:http://msdn.microsoft.com/zh-CN/library/system.int32.aspx --------------------编程问答-------------------- 可以存放在cpu寄存器、堆栈或者托管堆上。
如果在函数中定义的,一般在堆栈上,但是也可能被优化到寄存器中。
如果是成员变量,一般在托管堆上。
如果用了unsafe,做p-invoke,它也可以跑到非托管的堆上。 --------------------编程问答-------------------- 你看到的这些“字段”、“函数”,其实是对int装箱后“箱子上的”。 --------------------编程问答-------------------- 我的意思是
struct A
{
int no;
}
A a=new A();
a.no=3;
那么这个3存放在a这个结构的一个int 类型名为no的字段中。
但是
struct Int32
{
publicconstint MaxValue;
publicconstint MinValue;
其他的方法;
}
他只有两个字段,还是const的。
那么Int32 b=3;
那么这个3按理说应该是存储在Int32这个结构的某个成员字段中了?但Int32没有其他的字段了。 --------------------编程问答--------------------
引用 2 楼 devmiao 的回复:
你看到的这些“字段”、“函数”,其实是对int装箱后“箱子上的”。


你的意思是否可以理解为c#对Int32做了特殊处理?是struct Int32这个结构的机制不同于其他的struct? --------------------编程问答-------------------- 这种特殊处理叫装箱/拆箱。事实上,int在C#和C++中没有什么不同(不装箱的话),否则C#的性能要低死了。 --------------------编程问答--------------------
引用
#1

这是对的
但是俺表示Int32只是一个类型而已,而且是个值类型,publicconstint MaxValue;publicconstint MinValue;表示的是Int32类型最大值和最小值吧。
装箱和拆箱和这个没有什么关系吧。
--------------------编程问答-------------------- MaxValue跟MinValue就是ToInt32的最大跟最小值。根据代码表面意思就可以看到的。你也可以ToInt64
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,