找回密码
 注册
查看: 1928|回复: 1

求助:udf 时出现stack overflow怎么解决阿?

[复制链接]
发表于 2009-4-27 10:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我的udf里有一个矩阵,比较小的情况下,能顺利计算,但是当这个矩阵改大 点的时候比如[100][100]就出现stack overflow   怎么解决阿?
恳求指点交流
qq:41307444
发表于 2009-4-27 15:01:45 | 显示全部楼层
原帖由 yaner724 于 2009-4-27 02:55 发表
我的udf里有一个矩阵,比较小的情况下,能顺利计算,但是当这个矩阵改大 点的时候比如[100][100]就出现stack overflow   怎么解决阿?
恳求指点交流
qq:41307444



局部变量占用空间太大,或者函数调用层次太深就会出现“Stack Overflow”的情况. 解决这类问题的办法有两个,一是增大栈空间(后文中有详细描述),二是改用动态分配,使用堆(heap)而不是栈(stack)。

1. 增大栈空间
调出“Project/Settings/Link”选项卡,选择Output,其中的Stack allocations的reserve值便是栈空间所用大小VC6中默认为1MB,根据实际情况将其加大然后重新编译即可,具体说明可参见MSDN中的/stack选项。这个方案对于使用VC编译UDF来说简单可行,但对用纯C编译UDf的朋友不可行。

这里再多提一点,增大栈空间还有一个更简单的方法,那就是使用VC附带的EDITBIN工具,它可以直接增大可执行程序的栈空间,而不用重新编译程序,其使用方法如下:
EDITBIN /STACK:reserve[,commit] [files]

2.使用堆(heap)
采用malloc和free函数来动态分配数组。

3.可以考虑全局变量

[ 本帖最后由 gearboy78 于 2009-4-27 07:03 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表