怎样解决栈溢出

怎样解决栈溢出

1,什么是栈溢出?

由于栈一般默觉得1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。

2,解决方式:

方法一:用栈把递归转换成非递归

通常,一个函数在调用还有一个函数之前,要作例如以下的事情:a)将实在參数,返回地址等信息传递给被调用函数保存; b)为被调用函数的局部变量分配存储区;c)将控制转移到被调函数的入口. 从被调用函数返回调用函数之前,也要做三件事情:a)保存被调函数的计算结果;b)释放被调函数的数据区;c)按照被调函数保存的返回地址将控制转移到调用函数.全部的这些,不论是变量还是地址,本质上来说都是”数据”,都是保存在系统所分配的栈中的. 那么自己就能够写一个栈来存储必要的数据,以降低系统负担。

 

方法二:使用static对象替代nonstatic局部对象

在递归函数设计中,能够使用static对象替代nonstatic局部对象(即栈对象),这不仅能够降低每次递归调用和返回时产生和释放nonstatic对象的开销,并且static对象还能够保存递归调用的中间状态,并且可为各个调用层所訪问。

 

方法三:增大堆栈大小值

当创建一个线程的堆栈时,系统将会保留一个链接程序的/STACK开关指明的地址空间区域。可是,当调用CreateThread或_beginthreadex函数时,能够重载原先提交的内存数量。这两个函数都有一个參数,能够用来重载原先提交给堆栈的地址空间的内存数量。假设设定这个參数为0,那么系统将使用/STACK开关指明的已提交的堆栈大小值。后面将假定我们使用默认的堆栈大小值,即1MB的保留区域,每次提交一个页面的内存。

 

Java在创建线程时设置栈大小:thread(threadgroup group, runnable target, string name, long stacksize) 
         分配新的 thread 对象,以便将 target 作为其执行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。

Java虚拟机的堆大小怎样设置:命令行

 java –Xms128m //JVM占用最小内存

–Xmx512m //JVM占用最大内存

–XX:PermSize=64m //最小堆大小

–XX:MaxPermSize=128m //最大堆大小

本文来自http://blog.csdn.net/luqiang454171826 ,引用必须注明出处!

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119181.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vim 基本配置和经常使用的命令

    Vim 基本配置和经常使用的命令

    2022年1月10日
  • 为什么你学不会递归?告别递归,谈谈我的经验[通俗易懂]

    为什么你学不会递归?告别递归,谈谈我的经验[通俗易懂]可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了!可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。也有好几个人来问我有没有快速掌握递归的捷径啊。说实话,哪来那么多捷径啊,不过,我还是想写一篇文章,谈谈我的一些经验,或许,能够给你带来一些帮助…

    2022年9月12日
  • IP地址分类及划分「建议收藏」

    IP地址分类及划分「建议收藏」IP地址分类IP地址由4段数据构成,每段1字节,8位二进制数。根据网络号和主机号所占位数的不同,将IP地址分为四类。A类地址A类IP地址,第一段一字节数据表示网络号,剩下三段表示主机号。规定网络号最高位必须为0,则可以表示00000001-01111111,即126(除去全0和全1)个网络,剩下的3个字节数据可以表示2^24-2个主机。A类子网掩码255.0.0.0.B类地址B类IP地址,前两段2个字节数据表示网络号,剩下两段表示主机号。规定网络号最高位必须为10,则范围从100000000

    2022年6月10日
  • 毕业设计 – 题目:基于stm32的智能扫地机器人设计与实现

    1课题背景随着人口老龄化的到来和人民对提升生活品质的需要,人们对在现实生活场景中取代人力的服务机器人有着迫切的需要。同时,机电、自动控制、计算机、传感器等技术的发展也为制造服务机器人提供了技术支持。扫地机器人是服务机器人中技术最成熟和最为广泛使用的机器人。它可以自动的在室内行走,通过刷扫和吸尘将地面上的碎屑吸收进垃圾收集装置中,完成清洁地面的任务,有效的减少了人们清洁地面这种简单重复的家务劳动,节约了劳动力,提高了生活品质。对于许多忙于工作和生的人来说,扫地机器人已经成为家庭必

    2022年4月6日
  • psutil documentation

    psutil documentation转载自https://pythonhosted.org/psutil/#psutil.STATUS_RUNNINGWarning Thisdocumentationreferstonew2.Xversionofpsutil.Instructionsonhowtoportexisting1.2.1codeare here.Old1

    2022年6月13日
  • 在pycharm中配置anaconda环境_anaconda pycharm环境配置

    在pycharm中配置anaconda环境_anaconda pycharm环境配置在pycharm中如果出现了nopythoninterpreterconfiguredfortheproject表示你没有给这个工程提供一个解释器如果已经安装pychrm在后期怎么配置解释器呢:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210713171532445.png)file中选择setting然后点击右边的设置,Add进行配置,还是进入systeminterpreter,需要注意的是在Pycharm中选择错了anaconda.

    2022年8月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号