Arrays OCaml-int数组和垃圾收集

Arrays OCaml-int数组和垃圾收集,arrays,garbage-collection,ocaml,Arrays,Garbage Collection,Ocaml,我知道float数组在运行时表示为带有double\u-array\u-tag和未绑定float的块,因此垃圾收集器不会扫描它(因为double\u-array\u-tag>=no\u-scan\u-tag) 但是int数组如何呢?OCaml垃圾收集器如何知道不扫描其字段?如果我理解正确,垃圾收集器将扫描int数组的字段。对于依次出现的每个字段,它会注意到它是未绑定的,并且不会进一步跟踪它 这种行为可能不是很有效;但主要的方面是它是安全的。在浮点数组的情况下是不安全的,除非每个浮点数组都被装箱(

我知道
float数组
在运行时表示为带有
double\u-array\u-tag
和未绑定float的块,因此垃圾收集器不会扫描它(因为
double\u-array\u-tag>=no\u-scan\u-tag


但是
int数组如何呢?OCaml垃圾收集器如何知道不扫描其字段?

如果我理解正确,垃圾收集器将扫描
int数组的字段。对于依次出现的每个字段,它会注意到它是未绑定的,并且不会进一步跟踪它

这种行为可能不是很有效;但主要的方面是它是安全的。在
浮点数组
的情况下是不安全的,除非每个
浮点数组
都被装箱(这反过来又会导致空间效率低下)


如果上述(时间)效率低下是一个问题,则模块
Bigarray
可能会提供解决方案。

谢谢。那正是我所想的。还有另一种特殊的表示形式,即int_array_标记呢?@pifu,这意味着GC速度更快,但数组访问速度较慢。此外,乘法数组表示是OCaml开发人员不想(再次)做的事情。对于那些钻研源代码的人来说,这是一个相当有争议的话题,他们不想做任何更改,希望从数组类型中删除浮点数组技巧,以及有类似于您的建议的人。@PatJ谢谢。看起来你对OCaml的内部结构很了解。也许你能回答这个问题?