C#的内存组织
栈:非类成员的值类型变量
托管堆:由CLR管理的堆,引用类型变量
非托管堆:与C++同,只能由unsafe代码访问
栈的优势:1.快速,内存已经预分配
2.连续,总是自上而下顺序使用,不存在碎片
3.自动回收,调用返回后栈指针回弹
栈的劣势:1.不够大,大变量不宜使用栈
2.不能长期存在。调用后栈指针必须回弹
堆的优势:1.可以分配尽可能大的空间,理论上大至4G
2.存在时间长。只要不delete,进程结束前总是存在
堆的劣势:1.慢,需要寻找自由空间并分配(提交物理页)
2.不连续。总是从足够大的自由空间中寻找位置,从而产生内存碎片
3.不能自动回收,需要代码显示回收(delete)。
Goals determine what you are going to be!