OCaml - int数组和垃圾回收

pif*_*ifu 3 arrays ocaml garbage-collection

我知道a float array在运行时表示为带有double_array_tag和未装箱的浮点数的块,因此垃圾收集器不会扫描它(因为double_array_tag >= no_scan_tag).

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

kne*_*kne 6

如果我理解正确,垃圾收集器扫描一个字段int array.对于每个字段,它会注意到它是未装箱的,不再追求它.

这种行为可能效率不高; 但主要方面是它是安全的.float array除非每个人float都装箱(并且反过来又节省空间),否则在a的情况下是不安全的.

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

  • @pifu意味着更快的GC但更慢的阵列访问.此外,乘以数组表示是OCaml开发人员不想做的事情(再次).这是一个相当有争议的主题,人们深入研究那些不想要改变的人之间的源代码,那些希望将浮点数组技巧从数组类型中拉出来的人以及那些有类似于你的提议的人. (2认同)