相当于F#中的size_t

时间:2011-10-06 18:47:00

标签: f#

我在F#中看到List.length的类型是'列表 - > int

是否可以安全地假设int总是足够大以包含我可能创建的任何列表的大小,那是因为列表仅限于4G项目吗?

我正在学习的这本书(专家F#2.0)说int​​和int32的大小相同,所以我开始用size_t的typedef编写我的第一个程序。这是一个痛苦,因为它要求我明确地告诉编译器我的意思是什么类型的常量(例如7UL而不是7),尽管我希望通过将size_t转换为带有int构造函数的对象可以避免这种情况。我还希望这会引起一系列其他问题: - (

那么,通常的解决方案是什么?我是否只是在任何地方使用int而忽略了4G障碍?数组索引也是整数,因此,即使我能够很好地实现它,我也不能像我的size_t类型那样有用。

非常感谢提前。

3 个答案:

答案 0 :(得分:2)

一个4G整数阵列,需要16GB的RAM,而这只是用于整数(而不是更复杂的东西)。除非你有那么多记忆,否则没有理由关心这个限制。如果您确实想要使用那么多内存,请考虑将数组拆分为2-3个数组。

答案 1 :(得分:2)

在.NET中,您只能分配一个2GB的数组(即使您使用的是64位版本且内存足够)。如果你真的想存储这些大量的数据,那么你可能想要使用数组,因为F#列表有更大的开销。

出于这个原因,您可能不必担心长度限制为32位int。唯一需要注意的情况是,如果您正在编写数据结构以解决此2GB限制。

答案 2 :(得分:1)

在.NET中,对集合大小使用“int”。对于99.999%的情况来说,它足够大,最好在所有API中都有标准类型。