首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么OCaml中的整型只有31位?

为什么OCaml中的整型只有31位?
EN

Stack Overflow用户
提问于 2010-09-23 06:07:40
回答 2查看 31.3K关注 0票数 120

在其他任何地方都没有见过这个“特性”。我知道第32位用于垃圾收集。但是为什么只针对it而不针对其他基本类型呢?

EN

回答 2

Stack Overflow用户

发布于 2010-09-23 06:41:45

请参阅https://ocaml.org/learn/tutorials/performance_and_profiling.html的“整数表示法、标记位、堆分配值”一节,以获得更好的描述。

简而言之,这是为了提高性能。将参数传递给函数时,它要么作为整数传递,要么作为指针传递。在机器语言级别,无法判断寄存器是否包含整数或指针,它只是一个32位或64位的值。因此,OCaml运行时检查标记位以确定它接收到的是整数还是指针。如果设置了标记位,则该值为整数,并将其传递给正确的重载。否则,它是一个指针,并且查找类型。

为什么只有整数才有这个标签?因为其他的都是作为指针传递的。传递的内容可以是一个整数,也可以是指向其他数据类型的指针。由于只有一个标记位,所以只能有两种情况。

票数 30
EN

Stack Overflow用户

发布于 2010-09-23 06:27:26

它并不完全是“用于垃圾收集”。它用于在内部区分指针和未装箱的整数。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3773985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档