给定OCaml中的任何数组,我想通过首先获取其类型来获取数组元素的大小。
# let element_type = Array.element_type arr;;
# let element_size = of_int (sizeof element_type);;
但是,函数Array.element似乎不再可用。我还可以做些什么?
类型不是值,它没有任何内存表示形式。类型仅存在于源代码中,类型检查器使用它来静态验证是否缺少某些运行时错误。在编译过程中会从程序中删除类型。没有其他类型(如Java和C ++)中的类型的运行时表示形式。
所有值在OCaml中统一表示为立即数或指向堆的指针。因此,所有值都具有相同的大小,即等于一个机器字的大小。而且,严格来说,值表示是特定于实现的,因此您永远不要直接访问它。OCaml不是C,它负责内存表示(并对其进行抽象)。因此,尝试深入了解其内部是一个坏主意。
经过澄清的注释后,很明显您正在谈论Ctypes库中的数组类型。Ctypes库提供了C语言的接口(双向),并将C类型表示为OCaml值。它们还提供了CArray.t
将C数组表示为OCaml值的类型。对于该数组,您绝对可以通过利用Ctypes.CArray.element_type
函数来获得大小,例如,
let sizeof_element arr = sizeof (CArray.element_type arr)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句