首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么产品使用内存多于记录?

为什么产品使用内存多于记录?
EN

Stack Overflow用户
提问于 2015-04-20 08:40:06
回答 2查看 79关注 0票数 4

根据这个演示(http://oud.ocaml.org/2012/slides/oud2012-paper13-slides.pdf,PDF第4页),以下两种数据结构使用不同的内存量

代码语言:javascript
复制
type t1 = { f1: float; f2:float};;
type t2 = (float * float);;

而且t1使用的内存比t2少,有人能向我解释为什么会这样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的内部值表示。

票数 7
EN

Stack Overflow用户

发布于 2015-04-20 12:46:32

除了摄像机观察员的回答外,还有一些澄清说明:

  1. 在一般记录中,数组和元组使用的内存数量相同。
  2. 一些使用floats的复合数据结构是例外。默认情况下,每个浮点数都被装箱,即不是表示为即时值,而是表示为指向分配的双精度浮点值的指针。OCaml对浮点记录和数组进行优化,以直接存储数据,而无需双重装箱。
  3. 这不适用于多态记录,例如,float ref,即在掩码下面是一个a ref = {mutable contents : 'a}类型的记录,它仍然占用额外的空间,也就是说,它是一个指向记录的指针,包含一个指向单词的指针。但是,如果您定义,type float_ref = {mutable float_contents : float}这将是一个指向直接包含浮点值的记录的指针。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29742950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档