解决stack overflow栈溢出问题!

今天又遇到"stack overflow"的问题,让我和一个同事头痛了好半天。

问题描述:VC++写的COM模块(ATL),用Delphi做客户端调用,运行时报"stack overflow"的错误,调试发现此错误是在执行COM中一个函数入栈的时候发生的。

栈溢出!乍一眼还觉得挺吓人的,没什么经验,是头一次遇到这样的问题。堆栈的知识我不是很懂,只知道要执行的东西先要压入栈中,既然报了溢出,就说明东西太大了,容器装不下了。那到底是什么东西太大了呢?看来看去突然发现,这个出问题的函数一共写了有1000多行,天啦!

把函数体拆分开!当时首先是这样想的,但马上发现,不好拆,因为整个函数体里就是一个大大大大大的switch...case...分支流程,要是把每个case下的内容拆出来单独写成函数再调用,这个工作量太大。还是先想想其它出路……

东西大了,从另一面来讲不就是容器(栈)小了吗?不把这个东西变小,如果能把容器变大也应该能解决吧!要把栈变大,于是打开菜单Project(项目)->XXX Property(属性),在Linker(链接器)->System(系统)里找到Stack Reserve Size(堆栈保留大小)和Stack Commit Size(堆栈提交大小)两个选项,马上把这两个值设置成足够大,测试——结果依然报错。-_- !

继续思考,发现在调试时,错误消息是直接弹出来的,而VS的调试环境并没有事先捕获到。因为是用Delphi的程序在调用COM,那这样看来,应该到Delphi中去找找原因。同样,找到Project->Options->Linker->Max stack size,把这个值改大一些。果然!运行成功没有报错了!再回到VS把刚才改过的两处设置改回原默认值,仍然没有报错,看来瓶颈问题出在Delphi上。

以上小小心得,探究问题与解决问题的思路,自己做个笔记,也求与大家分享!

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值