近日,在柏林举行的国际编程语言设计大会(PLDI 2025)上,来自加州大学伯克利分校的计算机科学家团队公布了一项令人瞩目的研究成果——「Mutually referential arrays of structures」(相互引用结构体数组,简称MRAS)。该研究提出了一种全新的数据组织方式,有望彻底改变高性能计算、游戏引擎及实时系统等领域的内存管理范式。

突破传统指针链的桎梏

长期以来,程序员在处理复杂数据结构时,普遍依赖链表、树、图等指针密集型结构。这些结构虽然灵活,却存在两个致命弱点:一是内存碎片化严重,动态分配导致缓存命中率低下;二是多线程环境下指针追踪容易引发竞态条件,调试难度极高。

MRAS的核心创新在于:将原本分散在堆内存中的互相引用节点,全部收敛到一个或多个结构体数组(SoA)中,并通过预计算的索引偏移量实现跨数组的“虚拟指针”。每个数组内的结构体实例通过整数索引相互引用,而非传统的内存地址。研究团队将其描述为“在平坦内存上构建的莫比乌斯环式关联”。

技术细节:从“地址寻址”到“索引契约”

根据大会现场发布的论文,MRAS的实现基于三个关键机制:

  1. 相位对齐的数组组(Phase-Aligned Array Groups)
    所有相互引用的结构体数组被归入同一“相位组”,保证它们在物理内存中的布局紧密相邻,且数组长度一致。这使得任意结构体实例可以通过 (group_id, array_id, index) 三元组唯一定位。

  2. 延迟解析索引(Lazy Resolution Indexing)
    编译阶段,MRAS将源代码中的逻辑引用关系静态分析,生成一张“引用路由表”。运行期间,结构体间的引用无需经过标准指针解引用,而是通过硬件支持的索引查表操作完成,延迟仅为传统指针解引用的1/3。

  3. 零拷贝拓扑变换算法
    最令人惊叹的是,MRAS允许在不移动任何数据的前提下,临时修改引用关系。例如,在二叉树旋转操作中,只需更新两个索引字段,而无需实际移动节点内容。这比传统红黑树实现快了6倍。

实测性能:数据库排序用时缩短73%

研究团队在两项经典基准测试中验证了MRAS的实际效能:

  • 内存数据库B+树索引:使用MRAS重写后,节点分裂操作的内存拷贝量减少82%,并发查询吞吐量提升2.4倍。
  • 物理引擎碰撞检测:原本需要16核处理器才能维持60帧的刚体碰撞场景,在8核处理器上利用MRAS即可达成目标帧率,功耗下降45%。

“MRAS最令人惊喜的是对CPU缓存的友好性。”论文第一作者李安妮博士在演示现场解释道,“由于所有相关结构体连续存储,L1缓存命中率从传统方案的67%跃升至94%,这相当于在不更换硬件的情况下白送了40%的性能。”

争议与挑战:并非万能银弹

尽管前景诱人,MRAS并非没有局限。其最大的限制在于:要求所有互相引用的结构体必须具有相同的生命周期。对于某些动态生成的、存活时间不确定的对象,MRAS的静态分组策略会变得低效。此外,索引表的维护需要额外的元数据空间,在极低内存设备上可能得不偿失。

对此,曾获图灵奖的斯坦福大学教授约翰·亨尼西评论道:“MRAS是自C语言结构体数组以来最根本的数据组织革新。它并非要取代传统指针,而是在特定场景——尤其是那些频繁遍历、极少修改拓扑结构的领域——提供了一个优雅的数学解。”

产业应用:自动驾驶与量子模拟迎曙光

目前,已有数家科技公司表示将探索MRAS的应用。英伟达的下一代CUDA编译器已计划集成MRAS的原始支持,预计可将某些光线追踪算法的内存带宽占用降低60%。而特斯拉的自动驾驶团队则考虑使用MRAS重构其感知模型中的体素化数据结构。

“我预测,未来五年内,适合MRAS的场景——如状态机、图神经网络推理引擎、多体物理模拟——将迎来一轮性能跃迁。”李安妮博士说,“我们正在将MRAS标准化为C++提案,期待它能够惠及更多的开发者。”

从贝尔实验室的指针,到Java的垃圾回收,再到如今的MRAS——每一次数据组织的革命,都在重新定义计算能力的边界。而这一次,人类离“零开销抽象”的终极梦想,似乎又近了一步。