托管代码中的.NET内存管理是否比本机代码更快?

托管代码中的.NET内存管理是否比本机代码更快?,.net,performance,memory,clr,vm-implementation,.net,Performance,Memory,Clr,Vm Implementation,我本以为,托管代码中的内存分配是否比本机代码中的内存分配更快,这一点是很清楚的。也许虚拟机下的内存管理速度更快,因为没有对操作系统的上下文交换调用,但是我发现虚拟机本身需要定期调用操作系统以获得更多内存,而且它的管理开销是内存本身,而不是操作系统 请提供支持您立场的参考资料链接,而不是像我这样做出未经证实的断言。听Wintellect的杰夫·里克特的话,他是这方面的权威: 读读 P>详细介绍了内存分配在.NET中的工作原理,并将其与C++模型进行了简单的比较。 总之,.NET中的内存分配涉及获

我本以为,托管代码中的内存分配是否比本机代码中的内存分配更快,这一点是很清楚的。也许虚拟机下的内存管理速度更快,因为没有对操作系统的上下文交换调用,但是我发现虚拟机本身需要定期调用操作系统以获得更多内存,而且它的管理开销是内存本身,而不是操作系统


请提供支持您立场的参考资料链接,而不是像我这样做出未经证实的断言。

听Wintellect的杰夫·里克特的话,他是这方面的权威:

读读

<> P>详细介绍了内存分配在.NET中的工作原理,并将其与C++模型进行了简单的比较。
总之,.NET中的内存分配涉及获取当前堆栈点作为对象的地址,并将对象的数据大小添加到堆栈指针。通过比较,C++必须搜索一个释放指针列表,以便为对象的堆的面积足够大。因此,在大多数情况下,.NET会更快。

这不会导致堆栈不断增长吗?堆栈碎片呢?Josh,这就是垃圾收集的作用。它从堆中删除取消引用的对象,然后移动所有剩余的对象,使其再次成为一个连续的已用内存块,然后用新指针值更新所有受影响的引用。因此,托管代码中的内存分配速度很快,但偶尔垃圾回收事件的缓慢性是一个折衷方案。本文:“引用类型和装箱值类型位于堆中。它们由对象引用来处理,对象引用只是机器指针,就像C/C++中的对象指针一样。在本机C++中,堆由OS提供;它是由原生C++中.NET中的VM提供的,你可以通过抓取大量内存并覆盖新的和删除来管理自己的堆,但是大多数人只允许OS按照你的说法管理它。在托管代码中,VM必须自己管理它,因此它将为自己的本地管理堆获取一大块内存。