Bigarray模块上的文档有些含糊。它指出,该模块中数组的目的是保存“大数组”,但并未真正定义“大数组”的含义。什么时候应该在常规数组上使用Bigarray?是否有一定数量的元素可以使用Bigarray?是成千上万的吗?百万?数十亿?
什么使Bigarray更好地处理大型数组呢?是什么让常规数组更好地处理非大数组呢?
我找到了答案(来自this page):
bigarray库可实现大型的多维数字数组。这些阵列称为“大阵列”,以将它们与“模块阵列”中描述的标准Caml阵列区分开。 “大数组”和标准Caml数组之间的主要区别如下:
与Caml数组不同,大数组的大小不受限制(浮点数组在32位平台上限制为2097151个元素,其他数组类型为4194303个元素)。 大数组是多维的。支持1到16之间的任意数量的尺寸。相反,Cam1数组是一维的,需要将多维数组编码为数组数组。 大数组只能包含整数和浮点数,而Caml数组可以包含任意Caml数据类型。但是,大数组提供了更节省空间的整数和浮点元素存储,特别是因为它们除了支持标准的Caml类型的double之外,还支持“小的”类型,例如单精度浮点数以及8位和16位整数。精度浮点数以及32位和64位整数。 大数组的内存布局与C和Fortran中的数组完全兼容,从而允许在Caml代码和C/Fortran代码之间来回传递大型数组,而根本不进行数据复制。 大数组支持普通数组无法有效提供的有趣的高级操作,例如提取子数组和沿特定维度“切片”多维数组,所有这些都无需任何复制。