这些存储在哪里?
回答
我有an article谈论这一点,但你应该真的阅读由Eric Lippert各种博客文章。 "The truth about value types"可能是最重要的一个,以及“堆栈是一个实现细节”(part one; part two)。
从根本上来说,理解垃圾收集在可达性等方面更重要,而不是内存中的内容的实现细节。 可以在性能方面有所帮助,但是您需要不断提醒自己,这是一个实现细节。
+1对那篇文章感谢(你和Eric的)。我有同样的神话:< – 2011-02-23 08:03:54
非常感谢你的链接。Jon,其他的博客,书籍,应该是阅读以获得关于.net框架工作,设计模式的良好知识。 – Harsha 2011-02-23 08:49:19
@Harsha:阅读Eric Lippert博客的所有* Eric是非常明智的,并且写得非常好。 – 2011-02-23 09:01:03
此链接http://msdn.microsoft.com/en-us/magazine/bb985010.aspx解释了垃圾收集和一些内存管理。
注: 乔恩斯基特的Answer是比较正确的
堆栈 内存:
堆栈是职责范围内分配给自动变量的内存部分。
使用后进先出(LIFO)方法将数据存储在堆栈中。这意味着内存中的存储空间仅在称为堆栈顶端的内存的一端被分配和释放,分配为。堆栈是一段存储器及其相关的寄存器,用于临时存储信息,其中最近存储的项目是首先被检索的信息。
堆存储器
在另一方面,堆是用于动态存储器分配存储器的区域。内存块在这种情况下以任意顺序分配和释放。分配模式和块的大小在运行时间之前是未知的。堆通常被程序用于许多不同的目的。
堆栈比堆堆得快,但也更小,更昂贵。
例子:(它对于C虽然不是C#)
int x; /* static stack storage / main() { int y; / dynamic stack storage / char str; / dynamic stack storage / str = malloc(50); / allocates 50 bytes of dynamic heap storage / size = calcSize(10); / dynamic heap storage */
以上内容Taken from Here
有几处值得注意的例外... – 2011-02-23 07:55:09
您在顶部的一揽子声明非常危险。它表明*所有*值类型值都存储在堆栈中,这完全是不真实的。然后你给出了一个来自C的例子... – 2011-02-23 07:59:43
这也不是C例子。没有'void main()'这样的东西。 – 2011-02-23 08:11:57
你可以看看这个文章:
- 1. 这个文件存储在哪里?
- 2. .NET“独立存储”存储在哪里?
- 3. 在哪里存储数据?
- 4. 变量存储在哪里?
- 5. Git Stashes存储在哪里?
- 6. BaseX Db在哪里存储?
- 7. Properties.Settings.Default存储在哪里?
- 8. OCUnit在哪里存储NSUserDefaults?
- 9. TempData在哪里存储?
- 10. memcached在哪里存储?
- 11. 在哪里存储PHP cookies?
- 12. .data()在哪里存储值?
- 13. nginx在哪里存储rewrite_log?
- 14. AspnetIdentity在哪里存储UserTokens?
- 15. 数据存储在哪里?
- 16. jquery将存储在哪里?
- 17. 隐藏存储在哪里?
- 18. 哪里df.cache()存储
- 19. 这些nan从哪里来?
- 20. Asp.NET MVC4 - “这些去哪里?”
- 21. 这里有哪些参数?
- 22. iOS - 内存管理:这些内存在哪里?
- 23. Java如何使用首选项API?这些变量存储在哪里?
- 24. drupal -----这些变量在哪里声明?
- 25. 在哪里把这些查询DDD
- 26. 这些系统头文件在哪里?
- 27. DNS缓存为Ubuntu存储在哪里?
- 28. 闪存消息存储在哪里?
- 29. Dask在这里展示了哪些内存?
- 30. NSXMLParser:哪里存储值?
这真的不相关。这一切都是为你处理的;这是自动内存管理的重点。您看到的有关在堆栈上分配的值类型与在堆上分配的引用类型有关的任何便利规则过于简单并且可能具有误导性。 – 2011-02-23 07:50:07
如果可能的话,请阅读关于堆和堆栈以及对象如何存储的内容,您将清楚地了解内存是如何分配和破坏的 – kobe 2011-02-23 07:51:14