我正在阅读一本关于内存作为编程概念的书。在后面的一章中,作者大量使用了 arena 一词,但从未对其进行定义。我搜索了这个词的含义以及它与记忆的关系,但一无所获。以下是作者使用该术语的一些上下文:
“下一个序列化示例包含一种称为从特定 领域 分配内存的策略。”
“……这在处理内存泄漏或从特定 领域 分配时很有用。”
“……如果我们想释放内存,那么我们将释放整个 arena 。”
作者在一章中使用了这个词超过 100 次。词汇表中的唯一定义是:
从 arena 分配- 首先分配一个 arena,然后由程序本身(而不是由进程内存管理器)管理 arena 内的分配/解除分配的技术;用于复杂数据结构和对象的压缩和序列化,或用于管理安全关键和/或容错系统中的内存。
鉴于这些情况,谁能为我定义 竞技场?
原文由 Nocturno 发布,翻译遵循 CC BY-SA 4.0 许可协议
竞技场只是一块大的、连续的内存,您分配一次,然后通过分发部分内存来手动管理内存。例如:
关键是您可以完全控制内存分配的工作方式。唯一不受您控制的是初始分配的单个库调用。
一个流行的用例是每个 arena 仅用于分配一个固定大小的内存块。在这种情况下,您可以编写非常有效的回收算法。另一个用例是每个“任务”有一个竞技场,当您完成任务后,您可以一次性释放整个竞技场,而无需担心跟踪单个释放。
这些技术中的每一个都非常专业,通常只有在您确切知道自己在做什么以及为什么正常的库分配不够好时才会派上用场。请注意,一个好的内存分配器本身已经可以发挥很多作用,在您开始自己处理内存之前,您需要大量证据证明这还不够好。