当前位置:编程学习 > C#/ASP.NET >>

C# 中内存分配疑问 需要高手确认。

1、C#中的值类型 存储在堆栈上
2、C#中的引用类型存储在托管堆上
3、系统资源、文件句柄等存储在非托管堆上。
4、C#对象中,如果有一个值类型的成员(如 Int),也分配在托管堆上

5、C#中的堆栈 是什么概念?(堆、栈 不是两种不同的存储结构么?)

6、windows 堆,c-RunTime 堆,.NET 托管堆 有啥差别?


呵呵 希望高手指教。。。。 --------------------编程问答-------------------- 建议楼主先去把Windows核心编程啃了. --------------------编程问答-------------------- 楼主估计小学文化 --------------------编程问答-------------------- 去找本比较基础的书籍看看吧 --------------------编程问答-------------------- 本来系统里就只有1种堆和一种栈,有的人把栈叫做堆栈,其实这是不科学的。

堆和栈是2中不同的数据结构,栈具有很明显的线性性,必须遵循先进后出后进先出的规则

后来微软推出了.Net。也就有了所谓的托管,其实就是虚拟机。
在这个托管平台上又构建了自己的堆和栈

为什么句柄都要在非托管中,这个比较好解释。因为这个属于系统内核对象,托管的缺点或是.Net的能力限制就在这里,微软它自己也承认了。.Net无法和底层打交道 --------------------编程问答-------------------- 管它什么堆呀、栈呀滴,理解为内存管理就可以了,除非 lz 要研究内存管理算法!

对了,lz 滴到底想问啥?! --------------------编程问答-------------------- 1、C#中的值类型 存储在堆栈上 ---是的 
2、C#中的引用类型存储在托管堆上 ---是的
3、系统资源、文件句柄等存储在非托管堆上。 ---应该是存在非托管堆上的
4、C#对象中,如果有一个值类型的成员(如 Int),也分配在托管堆上 ---是的,只有用于临时值类型存放,例如返回值、参数值、地址等,才放在堆栈上。

5、C#中的堆栈 是什么概念?(堆、栈 不是两种不同的存储结构么?)
---堆栈是内存中完全用于存储局部变量或成员字段(值类型数据)的高效的区域,c#中的堆栈的概念并没有什么不同。堆和堆栈是不同的存储结构,在c#中,其内存由CLR管理,故又称托管堆。

6、windows 堆,c-RunTime 堆,.NET 托管堆 有啥差别? 
---我想这是有区别的,叫什么什么堆,应该是由什么什么来管理的一个内存区域,比如.net托管堆,是由.NET CLR管理的一块内存区域,用于分配、释放地址空间。不管是windows还是什么其他的框架,都有一些它自己分配内存的需要和方式,我想这就是这些叫什么什么堆的缘故吧。 --------------------编程问答-------------------- 堆栈就是栈,先进先出,类似于手枪弹夹的数据结构.栈的主要作用是在函数调用时存储参数和临时变量,函数调用返回时弹出.
堆开始是一片连续存储区域,新来数据存放在哪里完全由CLR决定.有可能因为不停的内存分配和释放产生内存"空洞". --------------------编程问答-------------------- 说错了,是先进后出
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,