Nik*_*kov 8 memory optimization haskell
考虑使用存在主义的以下数据模型:
data Node a = Node a (Map TypeRep AnyNode)
data AnyNode = forall a. Show a => AnyNode a
Run Code Online (Sandbox Code Playgroud)
先前已经解释了关于标准类型的存储器占用的规则.现在,存在类型的规则是什么,比如AnyNode?
是否有任何优化技术,例如一些使用unsafeCoerce可以避开存在性声明的变通方法?我问这个是因为类似的类型Node将被放置在高内存密集型lib的成本中心,所以内存占用就足够了,这就是为什么最脏的黑客是受欢迎的.
And*_*ács 15
该GHC-命令datasize包可以为帮助在这里:
{-# LANGUAGE RankNTypes, GADTs #-}
import GHC.DataSize
data Node = forall a. Show a => Node a
main = do
s <- closureSize $ Node 0
print s -- 24 bytes on my 64-bit system
Run Code Online (Sandbox Code Playgroud)
因此,Node与普通的一元数据构造函数相比,似乎需要一个额外的单词,大概是因为Show类字典指针.此外,我尝试添加更多类约束Node,并且每个约束都需要一个额外的空格.
我不确定是否有可能在特定情况下魔法消除字典指针.我想如果你想保留存在主义类型是不可能的.