怎样解决栈溢出

怎样解决栈溢出

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • smartctl命令详解_strace命令详解

    smartctl命令详解_strace命令详解smartctl命令详解定义smart(Self-Monitoring,AnalysisandReportingTechnology)是常用的磁盘检查工具smartctl:smartd由kernel-utils包缺省安装。用命令rpm-qlkernel-utils可以列出kernel-utils包中的文件它有一个守护进程(一个帮助程序)smartd,它能监视拥有自我监视,分析和汇报技术(Self-Monitoring,Analysis,andReportingTechnol

    2022年10月8日
    3
  • Java开发手册之集合处理[通俗易懂]

    Java开发手册之集合处理[通俗易懂]Java开发手册之集合处理

    2022年4月22日
    73
  • AMC7135_sip soc

    AMC7135_sip soc7.4SiamFC学习目标 目标 知道SiamFC的网络结构特点 掌握SiamFC的网络训练方式 应用 无 任意对象跟踪的问题是通过仅仅在线地学习对象外观的模型来解决,使用视频本身作为唯一的训练数据。尽管这些方法取得了成功,但他们的在线方法本质上限制了他们可以学习的模型的丰富性。需要跟踪的目标是通过起始帧的选择框给出的。框中可能是任意物体,甚至只是物体的某个部分。由于给定跟踪目标的不确定性,我们无法做到提前准备好数据,并且训练出一个.

    2022年10月1日
    3
  • 免费国内php空间_全球vps交流网站超级vps管理器

    免费国内php空间_全球vps交流网站超级vps管理器网站名称:000webhost.com250MB硬盘空间,100GB数据流量有足够的空间存放你的网站,emails 和数据库. 服务器为百兆独享接入Internet, 所以可以提供100G的数据流量.PHP 和MySQL 数据库支持不想其他免费空间,对php和mysql的功能进行限制.在这里你可以使用最新版本的php和mysql. 所有以下php特性都支持:

    2022年9月21日
    4
  • Python100道经典练习题(一)

    Python100道经典练习题(一)Python100 道经典练习题 一 当前计算机语言最火的 python 占据我们生活的各个方面 人工智能 云计算 5G 发展 汽车工业 互联网加行业等 话不多说 所谓磨刀不误砍柴工 掌握一门编程语言的最佳方法就是打好语言基础 下面是结合自己学 python 语言总结出的 100 道 python 练习题 喜欢 python 和正在学习 python 的小伙伴可以练练手哦 也欢迎行业大佬提出批评指正 数字组合 题目 有 1 2 3 4 个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 分析 四个数字组成三位数 把三位

    2026年2月3日
    0
  • phpstorm激活码2021.5.1[在线序列号]

    phpstorm激活码2021.5.1[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    47

发表回复

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

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