堆外的指针 20.2.3堆外部的指针

问题描述

OCaml用户手册4.11版规定:

20.2.3堆外部的指针

在OCaml的早期版本中,可以将字对齐的指针作为OCaml值使用到堆外部的地址,只需将指针转换为type值即可。从OCaml 4.11开始,此用法已被弃用,并将在OCaml 5.00中停止支持

停止支持是什么意思?性能损失?警告?程序崩溃了吗?

我的应用程序有很多恒定数据。 很多

为帮助降低主要的GC成本,我正在考虑将上述数据从OCaml堆中深度复制到我自己的仅增长/从未收集的内存中,并以大页为后盾。 (数据在编译时不是恒定的,但是一旦程序启动就可以。)

以上是否暗示我的方法将不再与将来的OCaml版本一起使用?

解决方法

使用堆外指针(格式不正确的OCaml值)的程序在编译器的无裸指针模式下崩溃。多核OCaml仅支持此无裸指针模式。

引用手册:

操纵指向OCaml中堆外块的指针的正确方法是将这些指针存储在带有标签Abstract_tag或Custom_tag的OCaml块中,然后将这些块用作OCaml值。