c#堆和栈的区别 面试题
发布网友
发布时间:2022-04-24 20:15
我来回答
共1个回答
热心网友
时间:2023-10-09 14:52
本质上没有区别,都是一块内存,只是用途不同。
程序是从main 方法开始的,方法内的局部变量都是栈内存,随着定义入栈到运行出作用域,出栈回收内存,生命周期相对来说很短(并不绝对)。
new 一个对象是在堆内存上,但是保存这个对象在堆内存地址的变量引用还是在栈上。
堆内存的回收有两种分支,有gc 和无gc
有gc 的,gc 服务会按照自己的特定触发逻辑挂起线程,扫描堆内存中的对象引用,发现没有变量引用它了,就会被gc 自动回收(gc 还有代的概念,暂且不谈)。
没有gc 的,只能靠程序员手动释放内存了。