OCaml中的整数、指针和块
我试图弄清楚OCaml的内存表示 我知道的是:OCaml中的整数、指针和块,ocaml,Ocaml,我试图弄清楚OCaml的内存表示 我知道的是: 整数和指针都是一个字大小(32位),最低位设置为区分 块用于装箱更复杂的数据,如记录等 我只是有点不确定他们之间的关系,所以请在这里确认 在上面的例子中,我的理解如下: x是一个整数 {foo=x}是一个块 在{foo=x}中,foo是一个直接值为x的整数(foo不指x的地址) {bar=r1}也是一个块 在{bar=r1}内部,bar的值是指针,它引用{foo=1} 我说的对吗?OCaml还有一个64位内存模型 在同一描述中混合int和指
在上面的例子中,我的理解如下:
是一个整数x
是一个块{foo=x}
- 在
中,foo是一个直接值为x的整数(foo不指x的地址){foo=x}
也是一个块{bar=r1}
- 在
内部,bar的值是指针,它引用{bar=r1}
{foo=1}
我说的对吗?OCaml还有一个64位内存模型 在同一描述中混合int和指针没有意义。OCaml中有int,但本身没有指针。它们是一个实现细节。未设置指针的低位;事实上,这就是设置int的低位的原因——以区别于指针
另外,您的描述在我看来是正确的。OCaml还有一个64位内存模型 在同一描述中混合int和指针没有意义。OCaml中有int,但本身没有指针。它们是一个实现细节。未设置指针的低位;事实上,这就是设置int的低位的原因——以区别于指针
您的描述在其他方面对我来说是正确的。看一下手册(绑定部分)和。看一下手册(绑定部分)和。看一下,它很好地涵盖了主题。@gsg是,我读了它,开始有点困惑。你可以使用
Obj
模块中的函数来检查值并检查它们是否是块,例如:Obj.repr r1 |>Obj.is_block
。看一下,它很好地涵盖了主题。@gsg yes,我读了它,开始有点困惑。您可以使用Obj
模块中的函数来检查值并检查它们是否为块,例如:Obj.repr r1 |>Obj.is_block
。
type r1_t = {foo : int;}
type r2_t = {bar : r1_t;}
let _ = let x = 1 in let r1 = {foo = x} in {bar = r1}