加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows内存分配问题

发布时间:2020-12-14 01:54:27 所属栏目:Windows 来源:网络整理
导读:我目前正在研究 Windows下的malloc()实现.但在我的研究中,我偶然发现了困扰我的事情: 首先,我知道在API级别,Windows主要使用HeapAlloc()和VirtualAlloc()调用来分配内存.我从here开始收集malloc()的Microsoft实现(包含在CRT中的那个 – C运行时)基本上调用
我目前正在研究 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可以随时改变他们的实施;建议远离.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读