我正在阅读内存分配概念。在哪里我发现一个声明说对象类型需要动态内存和原始类型需要静态内存他们证明它说如果要求是动态内存,它在堆上分配,否则它继续叠加。
我没有理解为什么会这样?
感谢每一位帮助。
由于
答案 0 :(得分:0)
这个答案并非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#的原因。我可能会因为这个答案而停靠:)
答案 1 :(得分:-1)
对象需要动态内存和原语需要静态内存的原因是原始类型具有预定义的大小;因此,它们可以放在静态存储器中。在运行时可能无法知道对象大小,因此内存是动态分配的。