代码改变世界

.NET 内存分配笔记

2017-01-19 17:36  祥_venux  阅读(475)  评论(0编辑  收藏  举报

阅读博客http://jonskeet.uk/csharp/memory.html的笔记(个人水平有限,如若翻译、记录有误,请提,谢谢~)

误区:引用类型保持在堆中,值类型保持在栈中

问题:前半句正确,后半句“值类型保持在栈中”不正确。

 

值类型的存储位置:

1.局部变量都存于栈中,另外引用类型的变量(不是指引用类型本身,而是指定义的那个用来存放引用地址的变量)也存于栈中;

2.全局变量存于堆中,和对象存放在一起,同样的生命周期;

3.值类型的实例变量和值类型的变量位置相同。(有点不通顺,翻译水平不行,原文:Instance variables for a value type are stored in the same context as the variable that declares the value type.)例如:定义一个结构变量,若为全局变量,则结构内部的值类型遵循第2条,反之则遵循第1条;

4.所有的静态变量都存于堆中,而不管定义的是值类型还是引用类型,且不管有多少实例,只保留一份。