微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大内存块分配和4K块

考虑一下Mark Russiniovich关于Windows内部的书籍。 这是关于大页面分配机制,用于在物理内存中分配大的非分页内存块

http://books.google.com/books?id=CdxMRjJksScC&pg=PA194&lpg=PA194#v=onepage

在操作系统运行一段时间之后,尝试分配大页面可能会失败,因为每个大页面的物理内存必须占据物理连续小页面的相当数量(参见表10-1),而物理范围页面还必须从大的页面边界开始。 (例如,物理页面0到511可以用作x64系统上的大页面,物理页面512到1023也可以,但页面10到521不能。)随着系统运行,空闲物理内存也会变得碎片化。 这对使用小页面的分配不是问题,但会导致大页面分配失败。

如果我正确地理解了这一点,他说分散的4K页面产生的碎片会阻止在物理内存中成功分配大的2M页面。 但为什么? 普通的4K物理页面很容易重新定位,也可以很容易地换出。 换句话说,如果我们有一个物理内存区域没有被其他2M页面占用,我们总是可以“清除它”:通过将任何干扰的4K页面从该物理内存区域重定位到某个其他位置来使其可用。 即从“天真”的angular度来看,只要有足够的免费物理内存,2M的configuration应该“永远成功”。

奇怪的内存问题?

windbg内存泄漏调查 – 缺less堆内存

如何衡量目前在Linux上使用的内存带宽?

内存使用率在免费调用时不会减less

VMMap如何知道给定的内存区域是线程堆栈,具体是什么?

我的逻辑有什么问题? Mark在谈到由4K页面导致的物理内存碎片可以阻止大页面的成功分配时究竟在说些什么呢?

如何dynamic地分配大内存,如10 G,在64-linux上使用c ++的新操作符?

subprocessOSError:无法分配内存

使用HWLOC的NUMA系统的realloc()

测量C#+ Mono中有多less内存

访问/ dev / mem的权限

它实际上在Windows XP中以这种方式工作。 但是成本太高,Vista中的设计更改禁用了这种方法在这博客文章中有很好的解释,我将引用其中的基本部分:

在Windows Vista中,内存管理人员认识到,这些长时间的延迟使得非常大的页面对应用程序的吸引力下降,所以他们改变了行为,所以对于来自应用程序的非常大的页面的请求经历了寻找连续物理内存的“易”部分内存经理进入绝望模式之前放弃了,宁愿只是失败。

他说的是随着时间的推移分配和释放连续内存块的一个具体问题,而且你正在描述一个解决方案。 你的逻辑没有什么问题,这大概是.NET垃圾收集器减少内存碎片。 你在现场

如果在棒球比赛中每排有10个座位,并且座位2,4,6和8被占用( 碎片化 ),那么除非您要求某人移动,否则您将永远无法为您和您的朋友在该排中获得3个座位( 压缩 )。

他所描述的4k块没有什么特别之处。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐