根据这个演示(http://oud.ocaml.org/2012/slides/oud2012-paper13-slides.pdf,PDF第4页),以下两种数据结构使用不同的内存量
type t1 = { f1: float; f2:float};;
type t2 = (float * float);;而且t1使用的内存比t2少,有人能向我解释为什么会这样吗?
发布于 2015-04-20 09:18:30
19.3.3 http://caml.inria.fr/pub/docs/manual-ocaml/intfc.html#sec425说:
浮点数数组(浮点数数组)有一种特殊的、无装箱的、更有效的表示形式.这些数组由指向带有标记
Double_array_tag的块的指针表示。
这是为了有效地处理大浮点数数组而引入的,但这也适用于只记录浮点数的类型。
https://realworldocaml.org/v1/en/html/memory-representation-of-values.html也是一个非常好的文档,它解释了OCaml的内部值表示。
发布于 2015-04-20 12:46:32
除了摄像机观察员的回答外,还有一些澄清说明:
floats的复合数据结构是例外。默认情况下,每个浮点数都被装箱,即不是表示为即时值,而是表示为指向分配的双精度浮点值的指针。OCaml对浮点记录和数组进行优化,以直接存储数据,而无需双重装箱。float ref,即在掩码下面是一个a ref = {mutable contents : 'a}类型的记录,它仍然占用额外的空间,也就是说,它是一个指向记录的指针,包含一个指向单词的指针。但是,如果您定义,type float_ref = {mutable float_contents : float}这将是一个指向直接包含浮点值的记录的指针。https://stackoverflow.com/questions/29742950
复制相似问题