在.NET中,整数数据类型是值类型(堆栈),而字符串是引用类型(堆)。
如果一个类A有一个整数和一个字符串类型的对象,在其中,类B创建了一个类A的对象,那么这个类A的对象将如何存储在内存中?在堆栈还是在堆中?
这是我在微软面试中被问到的问题。需要了解我的表现如何。
如果一个类A有一个整数和一个字符串类型的对象,在其中,类B创建了一个类A的对象,那么这个类A的对象将如何存储在内存中?在堆栈还是在堆中?
这是我在微软面试中被问到的问题。需要了解我的表现如何。
Eric Lippert 刚刚写了这篇文章:
关于使用堆栈还是堆存储的选择与所存储的对象类型本质上没有任何关系,这种说法是错误的。
真正的情况是:
在桌面CLR上的C#的Microsoft实现中,如果值类型是一个局部变量或临时变量,并且不是lambda或匿名方法的闭合局部变量,而且方法体不是迭代器块,并且jitter选择不要将值调入寄存器,则该值类型存储在堆栈上。
最重要的是,他强调你只需要关心某个生命周期内的事物存在于哪里,而不需要关心类型存在于哪里。
这只是一个棘手的问题。我认为这个问题是问你检查你在dotnet中类的知识。类是引用类型。所以简单来说,它将进入堆部分。
int
和string
字段来混淆问题,但问题实际上是关于类A
的。A
作为一个类,是一个引用类型。它的字段并不重要。因此,A
类型的对象将根据Microsoft在桌面CLR上实现的方式放在堆上等等。 - Anthony Pegram