我正在阅读内存分配概念。我在其中找到了一条语句,说对象类型需要动态内存,而原始类型需要静态内存,他们证明它是合理的,如果需要动态内存,它是在堆上分配的,否则它在堆栈上。
我不明白为什么会这样?
感谢您的每一次帮助。
谢谢
我正在阅读内存分配概念。我在其中找到了一条语句,说对象类型需要动态内存,而原始类型需要静态内存,他们证明它是合理的,如果需要动态内存,它是在堆上分配的,否则它在堆栈上。
我不明白为什么会这样?
感谢您的每一次帮助。
谢谢
这个答案不是 100% 完整的,但其中一些是相关的,我没有代表简单评论......
堆在程序的生命周期内一直存在并且更大(通常),因此可能是设计决定将对象(在 C# 和 Java 等内存管理语言中)分配给堆以不使堆栈内存过载。此外,堆栈内存本质上与变量范围(何时可以使用)相关联,如果内存管理器将处理对象,则在某些时候执行此操作会更有效,而不是每次变量弹出堆。堆也没有可变大小限制,它更现实地容纳对象,根据其类中定义的内容,对象可能非常大。
这是对两者(堆栈,堆)差异的很好解释:
http ://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx
也非常好,但更适合 C: http:
//gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html
尽管这些链接都没有专门针对 C# 的 WHY。我可能会因为这个答案而被停靠:)
对象需要动态内存而原始类型需要静态内存的原因是原始类型具有预定义的大小;因此,它们可以放在静态存储器中。运行时之前可能不知道对象的大小,因此内存是动态分配的。