与记忆相关的“竞技场”一词的含义是什么?

新手上路,请多包涵

我正在阅读一本关于内存作为编程概念的书。在后面的一章中,作者大量使用了 arena 一词,但从未对其进行定义。我搜索了这个词的含义以及它与记忆的关系,但一无所获。以下是作者使用该术语的一些上下文:

“下一个序列化示例包含一种称为从特定 领域 分配内存的策略。”

“……这在处理内存泄漏或从特定 领域 分配时很有用。”

“……如果我们想释放内存,那么我们将释放整个 arena 。”

作者在一章中使用了这个词超过 100 次。词汇表中的唯一定义是:

从 arena 分配- 首先分配一个 arena,然后由程序本身(而不是由进程内存管理器)管理 arena 内的分配/解除分配的技术;用于复杂数据结构和对象的压缩和序列化,或用于管理安全关键和/或容错系统中的内存。

鉴于这些情况,谁能为我定义 竞技场

原文由 Nocturno 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 715
2 个回答

竞技场只是一块大的、连续的内存,您分配一次,然后通过分发部分内存来手动管理内存。例如:

 char * arena = malloc(HUGE_NUMBER);

unsigned int current = 0;

void * my_malloc(size_t n) { current += n; return arena + current - n; }

关键是您可以完全控制内存分配的工作方式。唯一不受您控制的是初始分配的单个库调用。

一个流行的用例是每个 arena 仅用于分配一个固定大小的内存块。在这种情况下,您可以编写非常有效的回收算法。另一个用例是每个“任务”有一个竞技场,当您完成任务后,您可以一次性释放整个竞技场,而无需担心跟踪单个释放。

这些技术中的每一个都非常专业,通常只有在您确切知道自己在做什么以及为什么正常的库分配不够好时才会派上用场。请注意,一个好的内存分配器本身已经可以发挥很多作用,在您开始自己处理内存之前,您需要大量证据证明这还不够好。

原文由 Kerrek SB 发布,翻译遵循 CC BY-SA 3.0 许可协议

我会用这个 作为可能的答案。

•Memory Arena (also known as break space)--the area where dynamic runtime memory is stored. The memory arena consists of the heap and unused memory. The heap is where all user-allocated memory is located. The heap grows up from a lower memory address to a higher memory address.

我将添加 Wikipedia 的同义词:region、zone、arena、area 或 memory context。

基本上它是您从操作系统获得的内存,然后分配出去,然后可以一次全部释放。这样做的好处是对 malloc() 的重复小调用可能代价高昂(每次内存分配都有性能成本:在程序的逻辑地址空间中分配内存所花费的时间和分配内存所花费的时间该地址空间到物理内存),就好像您知道一个球场一样,您可以为自己获取一大块内存,然后根据需要/如何将其分配给您的变量。

原文由 Mike 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题