在其他任何地方都没有见过这个“特性”。我知道第32位用于垃圾收集。但是为什么只针对it而不针对其他基本类型呢?
发布于 2010-09-23 06:41:45
请参阅https://ocaml.org/learn/tutorials/performance_and_profiling.html的“整数表示法、标记位、堆分配值”一节,以获得更好的描述。
简而言之,这是为了提高性能。将参数传递给函数时,它要么作为整数传递,要么作为指针传递。在机器语言级别,无法判断寄存器是否包含整数或指针,它只是一个32位或64位的值。因此,OCaml运行时检查标记位以确定它接收到的是整数还是指针。如果设置了标记位,则该值为整数,并将其传递给正确的重载。否则,它是一个指针,并且查找类型。
为什么只有整数才有这个标签?因为其他的都是作为指针传递的。传递的内容可以是一个整数,也可以是指向其他数据类型的指针。由于只有一个标记位,所以只能有两种情况。
发布于 2010-09-23 06:27:26
它并不完全是“用于垃圾收集”。它用于在内部区分指针和未装箱的整数。
https://stackoverflow.com/questions/3773985
复制相似问题