1

假设我有一个变量:

let a = ref 3 in magic_code

Magic_code 应该打印存储在内存中的地址a。有没有类似的东西?我用谷歌搜索了这个,但没有任何结果......

4

1 回答 1

4

这应该有效:

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

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

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

另请参阅此答案

于 2013-11-10T22:39:48.940 回答