我想快速了解堆栈和堆中存储的内容。我有一个粗略的估计:
您打印的所有内容和内存地址都不是值,它们存储在堆栈中,而作为值打印出来的内容则在堆上,基本上根据值和引用类型。我完全错了吗?或者,您可以提供堆栈/堆的可视化表示吗?
As @Juul https://stackoverflow.com/a/39180867/503099声明的引用类型存储在堆中,值存储在堆栈中。
解释如下:
栈和堆
堆栈用于静态内存分配,堆用于动态内存分配,两者都存储在计算机的 RAM 中。
分配在堆栈上的变量直接存储到内存中,访问这块内存非常快,其分配是在程序编译时确定的。当一个函数或方法调用另一个函数,而另一个函数又调用另一个函数等时,所有这些函数的执行将保持挂起状态,直到最后一个函数返回其值。堆栈始终按 LIFO 顺序保留,最近保留的块始终是下一个要释放的块。这使得跟踪堆栈变得非常简单。从堆栈中释放一个块只不过是调整一个指针。
分配在堆上的变量在运行时分配其内存,访问该内存会慢一些,但堆大小仅受虚拟内存大小的限制。堆中的元素彼此之间没有依赖关系,并且可以随时随机访问。您可以随时分配块并随时释放它。这使得在任何给定时间跟踪堆的哪些部分已分配或空闲变得更加复杂。
For 逃离封闭:
需要记住的一个重要注意事项是,如果在闭包中捕获存储在堆栈上的值,则该值将被复制到堆中,以便在执行闭包时它仍然可用。
更多参考:http://net-informations.com/faq/net/stack-heap.htm http://net-informations.com/faq/net/stack-heap.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)