如何在OCaml中打印内存地址?

时间:2013-10-31 15:39:49

标签: ocaml

说我有一个变量:

let a = ref 3 in magic_code

Magic_code应该打印存储在a中的内存中的地址。有类似的东西吗?我用Google搜索了但没有出现......

1 个答案:

答案 0 :(得分:3)

这应该有效:

    let a = ref 3 in 
    let address = 2*(Obj.magic a) in
    Printf.printf "%d" address;;

OCaml使用单词的最低有效位区分堆指针和整数,0表示指针,1表示整数(请参阅Real World OCaml中的chapter)。

Obj.magic'a -> 'b类型的函数,可以让您绕过输入(即任意“强制转换”)。如果强制OCaml通过int不安全地将引用解释为Obj.magic,则获得的值是右移一位的地址。要获得实际的存储器地址,需要将其向左移1位,即将值加倍。

另见answer