【发布时间】:2009-11-02 12:37:30
【问题描述】:
Bigarray 模块的文档有些模糊。它指出该模块中数组的目的是保存“大数组”,但它并没有真正定义“大数组”的含义。什么时候应该在常规数组上使用 Bigarray?是否有一定数量的元素,我应该只使用 Bigarray?数以千计吗?百万?数十亿?
是什么让 Bigarray 更擅长处理大数组?是什么让常规数组更擅长处理...非大数组?
【问题讨论】:
-
可能是它把一个“大数组”定义为一个“稀疏数组”,虽然我对 OCaml 完全一无所知,所以我可以离开这里。
-
即使在那种情况下,你为什么需要不同的数据结构?
-
稀疏数组(不一定)在内存中保存空间,甚至不是数组中每个元素的指向
null的指针。如果您有一个包含 20 亿个元素的数组,正如您在问题中所建议的那样,那么这大约是 8GB 的价值,纯粹是指针。如果数组中实际上只有 5 个项目(大概在高索引处),那么您的存储空间实际上只需要容纳 5 个指针并占用少量字节。 -
如果您的数组中实际上有 20 亿个项目,那么无论是稀疏数组还是普通数组都无关紧要,您同样被搞砸了,需要寻找一种新方法存储您的数据。
-
@Matt - 哇,这完全有道理。我很惊讶我以前没有听说过稀疏数组。但话又说回来,我通常不做那种编程。 :-)