3

我正在继续开发我的程序IxSet,我很好奇我是否做错了什么(或者可以优化)。目前它消耗的内存比我认为的要多。

程序在这里:https ://bitbucket.org/k_bx/duplicates 分析结果在这里:https ://gist.github.com/4602235

ps:请有人添加“ixset”标签,因为我无法创建一个。

更新:

使用 -h 进行内存分析:http: //img-fotki.yandex.ru/get/6442/72443267.2/0_9d04d_4be1cd9f_orig

更新 2:

相同 -h 文件的整洁内存分析视图:http: //heap.ezyang.com/view/c1781ec5e53b00d30a9f8cd02f0b8a5e777674c9#form

4

1 回答 1

1

您只是在使用普通堆分析,它不一定捕获数据结构的使用。正如您所指出的,它通过代码中的函数分解堆。您可以通过探查器获得您想要的几个选项(来自 ghc 指南:http ://www.haskell.org/ghc/docs/latest/html/users_guide/prof-heap.html#rts-options-堆教授

-hc(可以缩写为 -h)。按生成数据的成本中心堆栈分解图表。

-hm 按包含生成数据的代码的模块分解活动堆。

-hd 按闭包描述分解图。对于实际数据,描述只是构造函数名称,对于其他闭包,它是编译器生成的标识闭包的字符串。

-hy 按类型细分图表。对于具有函数类型或未知/多态类型的闭包,字符串将代表实际类型的近似值。

-hr 按保持器集细分图表。

-hb 按传记分解图表。下面更详细地描述了传记简介

hm、hd 和 hr 可能对您最有用。考虑一下,您还可以通过使用 hb 获取有关严格性属性的一些信息。

于 2013-02-01T15:38:10.750 回答