gpt4 book ai didi

haskell - 大型代数数据类型的内存占用

转载 作者:行者123 更新时间:2023-12-02 15:20:29 25 4
gpt4 key购买 nike

假设我有一个带有很多构造函数的数据类型。

data ManyValues
= Value0
| Value1
| Value2
...
| Value255
| Value256
deriving (Show,Eq)

该数据类型的任意一个值的内存占用是多少?我最初的理解是每个构造函数都是内存中的一个8位字,但是如果数据类型中的构造函数数量多于8位中可能的值怎么办?构造函数是否会增加到 16 位等等,直到它可以处理数据类型中存在的全部构造函数?或者我把这一切都搞混了?

最佳答案

据我了解,无效构造函数占用 1 个机器字的存储空间(即,它是指向静态分配数据的指针)。因此,无论您的数据结构有 1 个这样的构造函数还是 1,000,000 个,它仍然是 1 个机器字。

带有字段的构造函数会占用更多空间,但 GHC 特殊情况的空构造函数会在该值的所有实例之间共享单个静态单例。 (例如,整个程序中只有一个 True。)

当然,当 thunk 计算结果为已存在的值(任何值)时,GHC 会使用“重定向”节点覆盖该 thunk,这会占用一些空间。垃圾收集器会定期删除重定向。

关于haskell - 大型代数数据类型的内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38989133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com