gpt4 book ai didi

c# - 类实例的内存管理

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:58 25 4
gpt4 key购买 nike

我对 .Net 中的内存管理有疑问。根据我的理解,内存分配和恢复如下:

  1. 对于所有的值类型,框架都会在栈中分配内存。

  2. 对于所有的引用类型,内存都会分配在堆中, 稍后将由 GC 清除或管理。

  3. 对于在栈中分配的内存,内存会在LIFO 方法,当执行完成时。

我怀疑下面的场景:

Class MathLibrary{

int number1;
int number2;

public int computesum(){
return number1 + number2;
}

MathLibrary maths = new MathLibrary(); // Class instance

这里的内存分配是如何发生的,我知道这个对象(数学)的引用将存储在堆栈中,实际内存将在堆中分配。如果是这样,为值类型(两个整数变量)和方法定义分配的内存在哪里。

最佳答案

For all value types, framework will allocate memory in the stack.

这并不总是正确的。如果值类型是在方法中声明的,它将进入堆栈。如果它是一个类级变量,它将在堆上,因为拥有它的对象是在堆上分配的。

因此对于 MathLibrary,这 2 个整数也将在堆上,因为它们是该对象的字段。

For all reference types, the memory will be allocated in the heap, which will be later flushed out or managed by the GC.

是的,这是真的。但是,这里要记住的一件重要事情是对象将在堆上分配,但如果该对象是在方法中创建的,则该对象的引用将在堆栈上。实际对象将在堆上。例如:

public void Foo()
{
Foo f = new Foo();
}

引用“f”将在堆栈上,但引用所引用的实际对象将在堆上。

关于c# - 类实例的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com