首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同的hs文件中分隔函数时发生堆栈空间溢出

在不同的hs文件中分隔函数时发生堆栈空间溢出
EN

Stack Overflow用户
提问于 2011-07-29 02:38:32
回答 2查看 169关注 0票数 5

我有一个很大的haskell文件,它编译和运行没有任何问题。我想将一些函数和类型定义放在一个通用hs文件中的单独模块中,然后将其导入我的主模块中。虽然主程序编译没有任何错误(它还编译了导入的模块),但当我尝试运行它时,我得到了堆栈空间溢出。

我试过了:

代码语言:javascript
运行
复制
ghc --make -O2 Main.hs
./Main -- stack space overflow

另外:

代码语言:javascript
运行
复制
ghc --make -O2 Main.hs Other.hs -o RunMe
./RunMe -- again, stack space overflow

这是正确的编译方式吗?还是我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-29 02:48:34

你的编译是正确的。问题一定出在代码本身。将它分成不同的模块可能会导致GHC应用不同的优化,从而导致这个问题浮出水面。

一个可能的原因是GHC以前能够使用严格性分析来生成在恒定堆栈空间中运行的程序。然后将模块一分为二,导致GHC不再能够做出同样严格的假设,因此无法保证严格的函数是安全的。

解决方案可能是添加您自己的严格性注释,或者使用导致这种情况的任何函数的严格版本。

票数 6
EN

Stack Overflow用户

发布于 2011-07-29 02:49:00

我可以想象,当函数从定义它们的相同模块中调用时,GHC能够更好地优化所使用的函数堆栈(通过执行strictness analysis)。听起来你至少有一个函数有空间泄漏,当GHC不知道函数是如何调用的时候,它无法优化它。

网上有很多关于查找和修复堆栈溢出的解释。例如,请参见Haskell WikiRWH

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6863984

复制
相关文章

相似问题

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