什么语言的非常大的列表?

时间:2008-12-22 23:10:37

标签: language-agnostic containers capacity

Java(可能是底层的C-ish代码)在java.util中的数组和容器的最大容量为Integer.MAX_VALUE(约20亿)。是否有其他语言的容量更大的容器?

9 个答案:

答案 0 :(得分:13)

您不需要语言,您需要数据库

答案 1 :(得分:2)

您可以使用支持long索引的两种语言编写自己的容器。

答案 2 :(得分:2)

如果您开始达到与可以存储在列表/数组/集合中的元素数量相关的32位数限制,那么我会认真开始寻找实现算法的新方法。

你将会有很多“我们需要这种专用硬件来执行我们的程序”类型的要求。

答案 3 :(得分:2)

C ++中的STL容器使用size_t索引,这些索引在64位计算机上为64位。

答案 4 :(得分:1)

你有一台有足够RAM的机器可以使用更多吗? O_o如果你这样做,我会说你需要自己的收藏品,因为内置产品的性能会令人怀疑......

答案 5 :(得分:0)

如果您自己编写容器,则没有限制。

答案 6 :(得分:0)

我通常使用数据库来存储大量数据。通过缩放解决了很多问题。

答案 7 :(得分:0)

对象数据库可能更适合您的目的。

例如,db4o

或者,对于固定大小对象的数组,可能值得尝试使用内存映射文件,但是您需要一个OS API的语言接口。

编辑:或者只是使用ORM将您的集合映射到标准SQL数据库。这些存在于大多数语言中。例如,ruby有activerecord,Java有休眠。

答案 8 :(得分:0)

没有人想要同时处理内存中如此大量的数据。我不知道你要做什么,但如果你需要最大化驻留数据量,你必须考虑到:

  • 首先使用动态内存分配。
  • 如果这是一个选项,您可以尝试(在您的操作系统中)最大化用户模式虚拟内存寻址空间。例如32位Windows可以使用典型的2GB / 2GB寻址空间用于用户模式/内核或3GB / 1GB。
  • 始终监控提交内存/操作系统提交限制,这样就不会强制操作系统崩溃,从而降低整个系统的速度。
  • 您可以锁定最少量的内存以专用于您的应用程序。这在操作系统与操作系统之间有所不同,但是例如,您可以为用户修复256MB,512MB,1GB的内存空间。
  • 如果您需要超越可用的用户模式地址空间,可以使用64位系统,或使用PAE等扩展名的32位系统。

嗯,有很多东西要研究,但只是我的2c。