OCaml中的整数,指针和块

时间:2014-05-28 21:46:55

标签: ocaml

我想弄清楚OCaml的内存呈现。

我所知道的是:

  1. 整数和指针都是一个字大小(32位),其中最低位设置为
  2. Block用于存储更复杂的数据,例如记录等。
  3. 我对他们之间的关系有点不确定,所以请在此确认。


    type r1_t = {foo : int;}
    
    type r2_t = {bar : r1_t;}
    
    let _ = let x = 1 in let r1 = {foo = x} in {bar = r1}
    

    在上面的示例中,以下是我的理解:

    • x是一个整数
    • {foo = x}是一个块
    • {foo = x}内,foo是一个直接值为x的整数(foo不会引用x' s地址)
    • {bar = r1}也是一个块
    • {bar = r1}内,栏的值是一个指针,它指的是{foo = 1}的地址

    我说错了吗?

2 个答案:

答案 0 :(得分:3)

OCaml还有一个64位内存模型。

在同一描述中混合使用和指针没有意义。 OCaml中有一些内容,但本身没有指针。它们是一个实现细节。指针的低位未设置;实际上,这就是设置int的低位的原因 - 区别于指针。

否则您的描述对我来说是正确的。

答案 1 :(得分:1)

查看手册(绑定部分)和A beginners guide to OCaml internals