gpt4 book ai didi

c++ - 在内存充足但碎片化的环境下,new/malloc 是否会造成内存洗牌?

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:40 25 4
gpt4 key购买 nike

这只是出于好奇。

例如,假设我们已经用完了 8 个字节中的 2 个:

[xx------]

如果我调用 new/malloc 请求 3 个字节,它应该可以正常工作,也许像这样:

[xx--xxx-]

如果我调用 new/malloc 请求另外 3 个字节,会发生什么?就可用内存而言,仍然有 3 个空闲字节,即使它们不是连续的。然后程序会“整理”内存以为新分配腾出空间吗?听起来不可能,因为我仍然会坚持对现有分配的引用。

如果是这样,那么通过扩展到一个极端情况,如果你的内存不知何故 最终变得非常碎片化(例如每隔一个字节分配 ala [x-x-x-x- x-x-x-x-]),这是否意味着我什至无法分配 2 个字节,尽管有 50% 的空闲内存?

我认为平台不重要?

对于扩展问题,我们深表歉意,但这是否也会发生在其他语言(如 Java/C#)中?

最佳答案

没错,内存会变得如此碎片化,以至于无法再进行分配。一个好的分配器会尽可能合并释放的 block ,以限制碎片。

MS .NET 托管框架通过间接分配内存块解决了这个问题,即通过指向 block 的指针的指针。这样,一个 block 可以被移动到碎片整理内存,而不用改变指针的指针。 (框架采取了一些措施来避免并发问题,因为 .NET 有一个异步运行的垃圾收集器。)

关于c++ - 在内存充足但碎片化的环境下,new/malloc 是否会造成内存洗牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55531894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com