C#堆栈内存

基础不牢,地动山摇~~今天来聊一下堆栈内存的基本知识。

大神们天天说,出问题了看堆栈、看堆栈,可是堆栈到底是什么呢?!

尽管在.NET framework下我们并不需要担心内存管理和垃圾回收,但还是需要了解堆栈内存的基本知识,我将用问答的形式来概述整理。

 

问:代码运行时,变量、方法等存放在哪里?

答:存放在内存中,使用两种数据结构来存储;

:负责存放方法(先这么简单粗俗的记忆,栈=衣柜,衣服必须从上往下找。)

:负责存放对象(堆=床,衣服随意丢在床上,随时可以找到需要的。)

补充:栈是自行维护的,方法执行完就自动出栈;而堆要考虑垃圾回收(好比床上随意丢的衣服需要收拾)

 

问:堆和栈中具体分别存放什么?

答:总共存放4样东西:值类型、引用类型、指针、指令

记住:1.引用类型总是放在堆中

2.值类型和指针总是放在它们被声明的地方。

3.指针大部分存放于栈中,指针本身也占内存,指针所指向的内容存放在堆中。

补充:举例int在方法中声明则存放在栈中,但int在类中声明则存放在堆中。

 

了解了这些原理有什么用呀?没什么用,但是可以使你更加容易理解一些处理 。

问:浅拷贝和深拷贝?

答:浅拷贝:将对象中值类型直接拷贝到新对象中,将引用类型拷贝一个新指针到新对象中,但指针依然指向老地址。(此时栈中会开辟新内存,但堆中不会)

深拷贝:将对象中值类型直接拷贝到新对象中,将引用类型拷贝一个新指针到新对象中,同时指针指向新的地址。(此时栈中会开辟新内存,堆中也创建内存)

补充:深拷贝的常用方式有反射序列化

 

1



微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

C#堆栈内存
嘿!有什么能帮到您的吗?
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close