永发信息网

坚持一下哪些措施可以避免栈溢出

答案:2  悬赏:0  手机版
解决时间 2021-01-26 18:05
  • 提问者网友:放下
  • 2021-01-26 04:02
A.不要定义占用较大的auto变量,应该将此类变量修改成指针,从堆空间非配内存
B.函数参数中不要传递大型结构/联合/对象,应该使用引用或指针作为函数参数。
C.减少函数调用层次
D.慎用递归函数
多选题
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-01-26 05:26
递归最容易导致的问题就是堆栈溢出了,一般来说操作系统给一个进程划分的栈内存是2M(好像是),按照正常的程序处理,局部变量进栈出栈,栈不太可能会溢出,但是递归会导致不会出栈,这就有可能导致堆栈溢出,你这里定义两个int型变量,即8字节,再加上保存的函数地址等信息,*100000次递归,还有一些其他的入栈的局部变量,可能已经超出了最大的栈空间,所以溢出。
全部回答
  • 1楼网友:十年萤火照君眠
  • 2021-01-26 06:12
常言所说的堆栈溢出,就是指栈溢出。使用 malloc(); 函数是动态分配内存堆区的空间,一般的程序如没用这个,就不存在堆溢出。栈溢出: 栈空间是预设的,它通常用于存放临时变量,如果你在函数内部定义一个局部变量,空间超出了设置的栈空间大小,就会溢出。不仅如此,如果函数嵌套太多,也会发生栈溢出,因为函数没有结束前,函数占用的变量也不被释放,占用了栈空间。解决办法:恰当的设置栈空间大小。分析代码,评估在哪个环节,使用的临时变量字节数最大,所设置的栈空间必须大于此。也可以将大的变量在全局进行定义,它就不占用栈区空间
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯