我(重新)使用以下步骤在OS X上安装了Ocaml:
> brew uninstall ocaml
> brew uninstall opam
> brew install ocaml
> brew install opam
> opam init
> eval `opam config env`
> opam switch 4.02.1
> opam install batteries core
Run Code Online (Sandbox Code Playgroud)
然后我尝试编译这个程序:
open Unix
open Printf
let main () =
match fork () with
| 0 -> printf "child\n"
| pid -> printf "parent\n"
let _ = main ()
Run Code Online (Sandbox Code Playgroud)
我使用这个命令编译:
ocamlc -o fork fork.ml
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
File "fork.ml", line 1:
Error: Error while linking fork.cmo:
Reference to …Run Code Online (Sandbox Code Playgroud) 我知道多维数组是连续分配的,因此int[4][3] arr;将连续分配 12 个 int 单元格。
我的第一个问题是,鉴于 C 不跟踪数组的长度,它如何知道将两个坐标访问模式转换为单个坐标内存地址所需的正确算法?例如,如果
arr == 0x? // some memory address
Run Code Online (Sandbox Code Playgroud)
然后
&arr[2][1] == 0x? + 3 * 2 int cells + 1 int cell.
Run Code Online (Sandbox Code Playgroud)
哪来的3个?
我的第二个问题是在堆上分配数组时,它们是否仍然以相同的连续方式分配?或者它是作为一个指针数组实现的,它取消了对一维数组的引用?