32位linux和64位linux中的SML数据类型

32位linux和64位linux中的SML数据类型,sml,Sml,我假设在标准ML中: int在32位linux上是32位的 在64位linux上,int也是32位的吗?此外,对于标准ML,是否有一个地方(url)可以概括不同数据类型的大小?感谢32或64位是指地址的维度。因此,数据类型大小相同,但指针大小会发生变化,因为64位系统使用64位来寻址内存整数的大小是特定于实现的-标准中没有指定。在MoscowML中,32位平台上使用31位整数,64位平台上使用63位整数 SML/NJ显然在64位和32位系统上都使用了31位整数(我之所以这么说,显然是因为我在

我假设在标准ML中:

  • int在32位linux上是32位的

在64位linux上,int也是32位的吗?此外,对于标准ML,是否有一个地方(url)可以概括不同数据类型的大小?感谢

32或64位是指地址的维度。因此,数据类型大小相同,但指针大小会发生变化,因为64位系统使用64位来寻址内存

整数的大小是特定于实现的-标准中没有指定。在MoscowML中,32位平台上使用31位整数,64位平台上使用63位整数

SML/NJ显然在64位和32位系统上都使用了31位整数(我之所以这么说,显然是因为我在任何地方都没有找到这个文档——我只是在我的64位机器上测试了它)

在MLton中,甚至可以使用编译器的
-default type
命令行参数设置Int的大小。

您可以使用来确定内置
Int
类型的大小

Int
类型的大小不是语言定义的,而是实现定义的,因此您要寻找的答案取决于您选择的编译器/解释器

例如,莫斯科ML在32位机器上提供31位整数,在64位机器上提供63位整数。()


注意,许多实现提供了几种int类型,其中一些可能是任意精度的。对于每种类型,都会有一个相应的
精度
函数来告诉您给定类型提供的精度。

请注意,高端SML实现默认提供无界(大)整数,因此您可以得到一个可靠的数学整数模型,而无需担心(对于通常的符号应用程序来说,正确性和效率都很高)。

int即使在64位操作系统中也始终保持32位。32位操作系统和64位操作系统之间的区别在于它们的内存寻址能力。对于数据类型大小,只需谷歌一下就可以了。很酷,谢谢。我确实花了一些时间谷歌搜索过(也在Harpers book中搜索过)在我问这个相当基本的问题之前,我没有找到答案(答案对我来说并不明显,因为Haskell Int在32位系统上是32位的,在64位系统上是64位的)@MarkGarcia不,它并不总是32位的。它是特定于实现的,可以很好地取决于平台是32位还是64位。对于SML的实现来说,在32位和64位平台上使用不同大小的整数是完全有效的。啊哈!那么mlton呢?您是如何测试它的?谢谢。@artella正如Sebastian刚才指出的那样out,您可以使用Int.precision来查找精度。但我只是尝试在REPL中键入各种数字,以查看哪些数字导致了“整数太大”错误;-)很酷,谢谢,刚刚看到Sebastian的答案并正在尝试。嗨,您知道如何将Int.precision转换为字符串吗?我刚刚安装了mlton,正在尝试“打印”它,以便可以看到Int.precision的值。Thanks@artellaInt.precision是一个
Int选项
。因此,您需要从选项类型中提取它(例如,使用
valOf
),然后使用
int.toString
int
转换为
字符串!使用valOf,我成功地验证了int在32位ubuntu上是32位的(在mlton中编译时)。谢谢