扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这两个函数一个是销毁栈DestroyStack,一个是清空栈ClearStack
成都创新互联-专业网站定制、快速模板网站建设、高性价比河北网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式河北网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖河北地区。费用合理售后完善,10多年实体公司更值得信赖。
销毁是把整个栈都释放掉,清空只是把栈里元素清除。
因为你的栈元素是int型基本变量,所以栈元素内容是直接存放在栈空间的,并没有另外申请内存保存栈元素,所以在从栈里移除栈元素时,不需要调用free函数。
实际上你的DestroyStack可以很直接的如下:
int DestroyStack(stack s)
{
free(s.base); //释放栈空间,这里假设s.base是个指针而不是数组
//如果s结构也是动态申请的,也需要执行free(s);
}
至于ClearStack,书上写的是没问题的,清空栈,不是要释放栈空间,而是把栈里的元素都清除,最直接的做法就是把栈顶指针指向栈底指针,栈顶和栈底指针相同时,就表示栈内无元素,栈空间还是保留,下次可以继续把栈元素压栈和弹栈。
当用户离开一个task一段时间后,系统就会清理掉task里出了rootActivity以外的Activity,如果用户又回来了,显示的是rootActivity,就像是用户离开又回来,是放弃以前的东西,开始新的东西。上面说的是默认的情况,有一些Activity的属性可以用来控制和修改这些行为。
alwaysRetainTaskState
如果一个task里的root Activity的alwaysRetainTaskState属性设置为true,那么前面描述的默认情况就不会出现了,task即使过了一段时间也会一直保留所有的Activity。
clearTaskOnLaunch
如果一个task里的root Activity的clearTaskOnLaunch属性设置为true,和alwaysRetainTaskState相反,即使是一瞬间的离开,系 统马上就会清理掉task里出rootActivity以外的所有Activity。
扩展资料
堆栈的作用:
在绝大多数的平台上,堆栈主要完成这么四个事情:
1、临时数据存放。
主要通过 push 和 pop 两个指令完成。这就好比,我们在工作的时候,手边临时拿不了的东西,先暂时放在桌子上,等手头空闲下来了,再移动到该存放的地方。
2、存放函数局部变量。
3、存放函数的虚参。
4、记录调用轨迹。
稍大的程序一般是一个函数调用另一个函数,然后再调用其他函数......为了能够让函数执行后按照原先的顺序返回,堆栈就必须记录调用的轨迹。
堆栈要求太高而导致溢出的原因:
1、需要临时存储的信息太多了。这种情况多发生在用内部函数(例如 max 、read、数组整体赋值 )处理较大量的数组。这种时候,我们可以用循环来代替一些内部函数,或者用循环分批次地处理内部函数。
2、函数局部变量太大。局部变量多数存储在堆栈里,当它很大是,就容易溢出。尤其针对数组大小由虚参给定的情况。
你这个栈是一个顺序栈,base是其所占内存的首地址,当然free(s-base)会把整个栈所占内存都释放,栈不仅仅是空了(象杯子中没有了水),而且变没了(连杯子都只剩下个底座了)。可以这样做,但是一定注意:对应的结构体中stacksize要置为0。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流