返回首页
最新
Ariandel 是一种内存模型,其中每个堆对象都位于由作用域管理的区域内。作用域退出时以 O(1) 的时间复杂度重置区域——只需一次指针写入和一次释放,无论分配了多少对象。
安全默认:分配函数返回 ARENA_PTR 句柄(打包的 arena_id 和偏移整数),而不是原始指针。在函数返回边界处,默认情况下无法构造悬空指针。跨作用域的生命周期延续是显式的——在分配之前,你需要通过 SCOPE(ptr) 进入目标区域,这样对象就会被路由到外部区域,而不转移所有权。
基准测试(未启用优化标志):100 万节点树的清理时间从 31 毫秒降至 1 毫秒(约 30 倍)。在紧密的内循环中确实存在回归(约 0.76 倍),因为 DEREF 无法像编译器那样提升基指针——规范对此进行了诚实的记录。
这是一个基于 C 宏的内存模型概念验证,目标是用于编译语言。值得关注的问题不是 C 实现本身,而是作用域结构化的区域路由是否可以作为垃圾回收和借用检查的合理替代,适用于重要程序类别。
代码库:<a href="https://github.com/hollow-arena/ariandel" rel="nofollow">https://github.com/hollow-arena/ariandel</a> — SPEC.md 包含完整模型,包括并发语义以及与 Tofte 和 Talpin 基于区域的内存的比较。