我认为在标准 ML 中:
- int 在 32 位 Linux 上是 32 位
在 64 位 linux 上,int 也是 32 位的吗?此外,对于标准 ML,是否有一个地方(url)概述了不同数据类型的大小?谢谢
我认为在标准 ML 中:
在 64 位 linux 上,int 也是 32 位的吗?此外,对于标准 ML,是否有一个地方(url)概述了不同数据类型的大小?谢谢
整数的大小是特定于实现的——标准没有规定。根据其文档,在 MoscowML 中,在 32 位平台上使用 31 位整数,在 64 位平台上使用 63 位整数。
SML/NJ 显然在 64 位和 32 位系统上都使用 31 位整数(我这么说显然是因为我没有在任何地方找到这个文档——我只是在我的 64 位机器上测试了它)。
在 MLton 中,甚至可以使用-default-type
编译器的命令行参数设置 Int 的大小。
您可以使用Int.precision
来确定内置Int
类型的大小。
类型的大小Int
不是语言定义的,而是实现定义的,因此您要寻找的答案取决于您选择的编译器/解释器。
例如,Moscow ML 在 32 位机器上提供 31 位整数,在 64 位机器上提供 63 位整数。(来源)
请注意,许多实现提供了几种 int 类型,其中一些可能是任意精度的。对于这些中的每一个,precision
将存在一个相应的函数来告诉您该给定类型提供的精度。
请注意,高端 SML 实现Poly/ML默认提供无界(大)整数,因此您可以获得一个忠实的数学整数模型,而无需担心(通常的符号应用程序的正确性和效率)。
32 位或 64 位是指地址的维度。所以数据类型的大小相同,但指针大小会发生变化,因为 64 位系统使用 64 位来寻址内存