段的概念 栈溢出

算法竞赛入门经典

P79

段是指二进制文件内的区域,所有某种特定类型信息被保存在里面,可以用size程序得到可执行文件中各个段的大小,

a.exe由正文段,数据段和bss段组成

在可执行文件中正文段用于储存指令,数据段用于储存已初始化的全局变量,BSS段用于储存未赋值的全局变量所需的空间

调用栈并不储存在可执行文件中,而是在运行时创建。调用栈所在段称为堆栈段。和其他段一样,堆栈段也有自己的大小。前面的错误 阶乘f(10000) 就不难理解了

每次递归调用都需要往调用栈里增加一个栈帧,久而久之就越界了。

 

建议把较大的数组放在main函数外,因为局部变量也是放在堆栈段的。栈溢出不一定是递归调用太多,也可能是局部变量太大,只要总大小超过允许的范围就会产生栈溢出

 

posted @ 2017-08-11 11:06  于繁华求淡然  阅读(287)  评论(0编辑  收藏  举报