解决方法
很难区分堆和堆栈对象(这是有意的,因为.NET希望从程序员那里隐藏这个实现细节).
您可以采取的一种方法是比较基于地址的default hash codes个盒装对象,并观察它们不断变化(demo):
static object MakeBoxed() { int n = 5; object a = n; return a; } public static void Main() { for (int i = 0 ; i != 10 ; i++) { object a = MakeBoxed(); Console.WriteLine(RuntimeHelpers.GetHashCode(a)); } }
在MakeBoxed中创建的对象不能在堆栈上,因为MakeBoxed的堆栈帧在调用后被停用.此外,它们不能位于Main的堆栈帧中,因为堆栈帧不会增长,但所有对象都具有不同的地址(默认哈希码).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。