博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样解决栈溢出
阅读量:6940 次
发布时间:2019-06-27

本文共 1010 字,大约阅读时间需要 3 分钟。

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://rkinl.baihongyu.com/

你可能感兴趣的文章
VS 2005的一个BUG及对其原因猜测
查看>>
HTTP协议的头信息详解
查看>>
I.MX6 Android Linux shell MMPF0100 i2c 设置数据
查看>>
网络复习之TCP
查看>>
微信小程序前端源码逻辑和工作流
查看>>
【Spring实战】—— 4 Spring中bean的init和destroy方法讲解
查看>>
搜索引擎关键词劫持之asp篇
查看>>
Nginx 学习笔记(二)Web 服务启用 HTTP/2
查看>>
layer web 弹窗
查看>>
JVM GC算法 CMS 详解(转)
查看>>
mysql输入密码后闪退怎么办?
查看>>
mysql 文件导入方法总结
查看>>
汉化入门之ExplorerControls
查看>>
python 转 exe -- py2exe库实录
查看>>
第 55 章 Cherokee
查看>>
iOS - Plist 数据解析
查看>>
sql 经常使用的语句(个人)
查看>>
日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)
查看>>
查看Linux下的文件
查看>>
7mall:4种方法弥补店铺亮点不够多的产品
查看>>