我知道 float 组
在运行时表示为带有double_array_tag
和未装箱浮点的 block ,因此垃圾收集器不会扫描它(因为double_array_tag >= no_scan_tag
)。
但是int 数组
又如何呢? OCaml 垃圾收集器如何知道不扫描其字段?
最佳答案
如果我理解正确的话,垃圾收集器将扫描int数组
的字段。依次对于每个字段,它会注意到它已被拆箱,并且不再继续追查。
这种行为可能不是很有效;但主要方面是它是安全的。对于 float 数组
来说,这是不安全的,除非每个单独的 float
都被装箱(这反过来会导致空间效率低下)。
如果上述(时间)效率低下是一个问题,Bigarray
模块可能会提供解决方案。
关于arrays - OCaml - int 数组和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976380/