对象的内存分配问题
class Program
{
User u1 = new User();
static User u2 = new User();
int lenght1 = 2;
static int length2 = 2;
static void Main(string[] args)
{
}
}
对 对象的内存分配还是有一些疑问,先不管它的先后顺序。
1. u1分配:先在堆栈上分配一个变量u1,再在托管堆中分配一内存new User(),再将u1指向new User(); 是不是这样的?
2. u2的分配和u1的一样吗,也是u2在堆栈,new User()在托管堆吗?static 变量会被分配到加载堆中Loader Heap,是 指等号右边的分配到加载堆中还是 连左边的一起分配到加载堆中。
3.引用对象Class中的 值类型也是分配在托管堆中,是指 值分配在托管堆中吗?
如 length1, 是值2 分配在托管堆中,length1这个变量是分配在 堆栈吗?
4.如果以上是这样分配的,那就是 等号 左边的变量分配在 堆栈,右边的值分配在托管堆中,是不是这样?
各位解释一下,谢谢!
喵喔喔
浏览 327回答 20
20回答
-
大话西游666
值类型肯定是存放在栈上,引用类型肯定是存放在堆中
static标识只是标识该对象在加载时被创建,其他和普通对象没区别
-
Smart猫小萌
这个 引用类型 和值类型的分配 是你这样说的。细点说说吧,
u1 这个变量是分配在 堆栈,但是 u1指向的那个对象值分配在 堆 中吧?
-
温温酱
@Qlin:
1. u1分配:先在堆栈上分配一个变量u1,再在托管堆中分配一内存new User(),再将u1指向new User(); 是不是这样的?
这个理解是对的
-
开心每一天1111
@Rich.T:
谢谢,兄弟 那说说 static int length2 = 2; 吧, 左边 和右边是怎么分布的?
-
烙印99
@Qlin:
前面说了呀,static标识只是标识该对象在加载时被创建,其他和普通对象没区别
-
慕雪6442864
CLR via C# 买本这本书看看
-
侃侃无极
书上也是 这样带过,有没有 更细的 说说
u1 这个变量是分配在 堆栈,但是 u1指向的那个对象值分配在 堆 中吧?
-
拉风的咖菲猫
@Qlin: 这个本 你不得不知道的.net 也不错的
-
SMILET
@chenping2008:
谢谢! 就是 在 看这本书 时 想到的疑问
-
梵蒂冈之花
@Qlin: 其实你只是关注了那些变量,你有没有看到还有一个program的实例的。你说的那些变量都是在program的实例中的
打开App,查看更多内容