stackoverflow是什么网站(stackoverflow)
1、顾名思义,stack overflow 就是是栈溢出了。
2、在进行数值运算时,我们常常要和运算结果的溢出打交道。
3、数值运算结果可能上溢(overflow),也可能是下溢(underflow)。
4、不过栈的溢出显然只可能是上溢,即栈空间被用完了。
5、在提起“栈”(stack)这个概念的时候,千万不要忘记了它的兄弟“堆”(heap),也要切记不要把二者搞混了。
6、 那么,什么时候会把给用完了呢?如果我们记得C程序中的局部变量是在栈中分配的,函数调用会占用一部分栈空间,则可以很容易地构造出相应的测试用例。
7、定义占用空间过大的局部变量所导致的栈溢出C:>more stack_local.c/* * Allocate too much memory from stack will cause stack overflow. */#include
8、 2、函数递归调用导致的栈溢出C:>more stack_recursive.c/* * Infinite recursive calls will lead to stack overflow soon. */#include
9、查看进程返回值能发现它其实是异常终止了。
10、只不过没有像 stack_local 那样弹出一个对话框。
11、C:>echo %errorlevel%-1073741819 要搞清楚这两个程序为什么有这点细微的区别,可以查阅一下二者的汇编代码。
12、原来是 _chkstk() 在起作用,其中 stack_local 在程序初始加载时就会导致 _chkstk() 失败,触发异常。
13、而 stack_recursive 可以正确加载,并运行一段时间,然后导致栈溢出,并触发异常。
14、 要正确处理栈溢出采用以下办法:(1)修正我们的程序,不要造成无穷递归或太深的递归。
15、我们可以把某些递归代码非递归化,例如那个经典的 qsort ,最好就用非递归的算法来实现,就比较皮实一点。
16、(2)修正我们的程序,不要定义过大的局部变量,特别是在定义大结构、大数组时要格外小心。
17、有时我们可能会用 _alloca() 这样的特殊函数直接在栈上分配空间,更要多加注意。
18、(3)利用编译器的特性,将进程允许的栈大小设置得大一些。
19、例如可以采用 MSC 中的 /STACK 参数开关。
20、(4)对于那些还可能导致栈溢出的代码,采用 Microsoft 的结构化异常处理或标准的 C++ 异常处理机制,结合 _resetstkoflw() 进行处理。
21、当然了,要是不嫌麻烦,我们也可以自己探测所用栈的大小,动态地检测是否可能导致栈溢出,以避免可能的异常。
相关文章
- 建行银行装修贷款利率?
- 申请过的网贷怎么注销?
- 网贷举报投诉平台有哪些?
- 什么贷款最好办?
- 001042基金净值查询今天 ?
- i贷今日额度已被抢光,您出手慢了是什么意思?
- 花呗补充资料提额8000可信吗?花呗立即提额方法有吗?
- picc车险电话号人工服务电话
- 农业银行开户行查询短信查询 ?
- 贷款50000一年利息是多少?计算方式有什么?
- 网上好借钱的平台有哪些可靠?
- 用房子贷款10万一年多少利息呢?
- 2018平安i贷几点开额度?
- 在分期乐上借10000得还多少?
- 津巴布韦最大面值货币
- 360借条开通要查征信吗我的征信会不会有影响
- 华融湘江银行大额存单有风险吗?
- 18岁网贷能过的口子
- 西安征信报告打印地点
- 贷款1万元一年利息大约是多少?