gpt4 book ai didi

java - Java 或 C++ 中的堆管理器如何跟踪线程或进程使用的所有内存位置?

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:01 25 4
gpt4 key购买 nike

我想了解 Java 中的堆管理器或 C++ 或 C 操作系统中的堆管理器是什么数据结构来跟踪线程和进程使用的内存位置。一种方法是使用对象和内存地址的映射以及内存起始地址和内存中对象大小的反向映射。但在这里它无法在 O(1) 时间内满足新的内存请求。有没有更好的数据结构来做到这一点?

最佳答案

请注意,非托管语言将通过系统调用分配/释放内存,通常不会自行管理。仍然不管抽象级别是什么(操作系统到运行时),都必须处理这个问题:

一种方法称为好友 block 分配,在 Wikipedia 上用示例进行了很好的描述。 .它本质上跟踪内存中不同大小(通常是 2 的倍数)的空间使用情况。这可以通过许多具有巧妙索引的数组来完成,或者可能更直观地使用二叉树来完成,每个节点告诉某个 block 是否空闲,级别上的所有节点代表相同大小的 block 。

这会受到内部碎片的影响;随着事情来来去去,您最终可能会分散数据而不是有效地整合数据,这使得它更难适应大数据。这可以通过更复杂的 dynamic system 来解决。 , 但好友 block 的优点是简单。

关于java - Java 或 C++ 中的堆管理器如何跟踪线程或进程使用的所有内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080180/

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