wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Windows内存分配问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我目前正在研究 Windows下的malloc()实现.但在我的研究中,我偶然发现了困扰我的事情: 首先,我知道在API级别,Windows主要使用HeapAlloc()和VirtualAlloc()调用来分配内存.我从here开始收集malloc()的Microsoft实现(包含在CRT中的那个 – C运行时)基本上调用了块的HeapAlloc()> 480字节,并以其他方式管理为Virtual
我目前正在研究 Windows下的malloc()实现.但在我的研究中,我偶然发现了困扰我的事情:

首先,我知道在API级别,Windows主要使用HeapAlloc()和VirtualAlloc()调用来分配内存.我从here开始收集malloc()的Microsoft实现(包含在CRT中的那个 – C运行时)基本上调用了块的HeapAlloc()> 480字节,并以其他方式管理为VirtualAlloc()分配的特殊区域,用于小分配,以防止碎片.

那一切都很好,很好.但是还有其他实现的malloc(),例如nedmalloc,它声称比微软的malloc快了125%.

所有这些让我想到了一些事情:

>为什么我们不能只为小块调用HeapAlloc()?在碎片方面表现不佳(例如通过“先适合”而不是“最适合”)?

>实际上,有没有办法知道各种API分配调用的内幕是什么?这将非常有帮助.

>是什么让nedmalloc比微软的malloc快得多?
>从上面,我得到的印象是HeapAlloc()/ VirtualAlloc()非常慢,以至于malloc()只是偶尔调用一次然后管理分配的内存本身要快得多.这个假设是真的吗?或者因为碎片而需要malloc()“包装器”?有人会认为像这样的系统调用会很快 – 或者至少会有一些想法被放入其中以使它们有效.

>如果是真的,为什么会这样呢?

>平均而言,典型的malloc调用(可能是已分配段数的函数)执行了多少(一个数量级)的内存读/写操作?我会直观地说它是一个普通程序的十位,我是对的吗?

解决方法

>调用HeapAlloc听起来不是跨平台的. MS可以随时改变他们的实施;建议远离.

大佬总结

以上是大佬教程为你收集整理的Windows内存分配问题全部内容,希望文章能够帮你解决Windows内存分配问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。