我正在读一本关于内存作为编程概念的书。在后面的一章中,作者大量使用了这个词arena,但从未定义它。我搜索了这个词的含义以及它与记忆的关系,但一无所获。以下是作者使用该术语的一些上下文:
“序列化的下一个例子采用了一种称为
从特定的内存分配arena."
“......这在处理内存泄漏或分配时很有用
从具体的arena."
“......如果我们想释放内存,那么我们将释放
所有的arena."
作者在一章中使用该术语超过 100 次。术语表中唯一的定义是:
从竞技场分配- 先分配竞技场再分配竞技场的技术
由程序管理竞技场内的分配/解除分配
本身(而不是由进程内存管理器);用于
复杂数据结构和对象的压缩和序列化,
或用于管理安全关键和/或容错的内存
系统。
任何人都可以定义arena鉴于这些背景对我来说?
竞技场只是一块大的、连续的内存,您分配一次,然后通过分配该内存的一部分来手动管理内存。例如:
char * arena = malloc(HUGE_NUMBER);
unsigned int current = 0;
void * my_malloc(size_t n) { current += n; return arena + current - n; }
关键是您可以完全控制内存分配的工作方式。您无法控制的唯一事情是初始分配的单个库调用。
一种流行的用例是每个竞技场仅用于分配一个固定大小的内存块。在这种情况下,您可以编写非常有效的回收算法。另一个用例是每个“任务”有一个竞技场,当您完成任务时,您可以一次性释放整个竞技场,而无需担心跟踪各个释放。
这些技术中的每一种都非常专业,通常只有在您确切地知道自己在做什么以及为什么正常的库分配不够好时才会派上用场。请注意,一个好的内存分配器本身已经发挥了很多作用,并且在您开始自己处理内存之前,您需要大量的证据来证明这还不够好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)