问题描述
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值。