Warning: file_get_contents(https://whois.pconline.com.cn/jsLabel.jsp?ip=127.0.0.1) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in D:\wwwroot\huidong\wwwroot\function.inc.php on line 884
【栈扩容】在程序中申请更大的栈,栈为什么会爆?(Stack overflow) - huidong

huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


//更大的栈
#pragma comment(linker, "/STACK:102400000,102400000")


2021.5.3补充:

上述代码是在VS下的实现。


为什么会爆栈?

程序的默认栈大小在2MB左右,在申请大数组的时候,比如

int main()
{
    int a[10240000000] = { 0 };
    return 0;
}

就会因为栈的大小不够申请这么大的数组空间而爆栈。


为什么栈这么小,才2MB?

因为小容量更适合栈这种数据结构,效率更高。


如果非要增加栈容量,就是上面的代码了。不同的编译器实现扩栈的方式不同。


但是,如果将大数组声明为全局变量或static变量,那么数组占用的就不是栈的空间,而是  全局初始化数据区/静态数据区(Data Segment)  的空间,空间够大,就不溢出。


更详细的学习,建议看这个,写的不错。

https://blog.csdn.net/qq_21882325/article/details/65445810 


PS:还有六十多天就中考喽……我初三下学期以来其实根本没碰编程一类的东西了,只是偶尔看看群,了解一些零散的知识,看看近期的科技资讯,以至于我不会太落后与时代罢了。





返回首页


Copyright (C) 2018-2024 huidong