我有以下几行代码:分配内存以可变在c#
SomeClass a;
SomeClass b = new SomeClass();
SomeClass c = new SomeClass()
{
Foo="sss",
Bar="dddd"
};
请告诉我类实例a
,b
和c
的大小(在存储器中)?
有多少内存分配给每个变量?
我有以下几行代码:分配内存以可变在c#
SomeClass a;
SomeClass b = new SomeClass();
SomeClass c = new SomeClass()
{
Foo="sss",
Bar="dddd"
};
请告诉我类实例a
,b
和c
的大小(在存储器中)?
有多少内存分配给每个变量?
当你实例化b和c时,内存被自动分配,你不必自己处理它。你可以忘记那个部分,这是被管理的魔法部分,一旦这些对象不再需要(无指针...),垃圾收集器将为你释放内存空间。尽管如此,b和c采用相同的内存大小,因为它是相同的类型。 a没有空间,因为它尚未初始化。
实际变量都是相同的大小,因为它们是引用。并且堆中的实际对象也将具有相同的大小(请注意,这些字符串将是单独的对象,该对象具有引用2)。当然,'a'没有实际引用,因为它是'null'。 https://stackoverflow.com/questions/3800882/how-big-is-an-object-reference-in-net – juharr
什么是在堆上,什么是堆栈实际上是一个框架的实现细节。由于是串联实习。并且JiT编译可能会丢失一个,因为它永远不会被使用,并且它是无效代码。所以:可能的最大和最小量之间的任何值,取决于运行时间。更大的问题是:你为什么问?你有什么样的微观优化或错误的道路? – Christopher