程序的栈空间应该是非常大的,为什么还要指定栈大小? 我们通常编译一个程序的时候,编译器会默认设置栈的大小。那么这个栈的大小在运行时是如何被检测的,例如我声明一个非常大的局部数组,超过了栈的限制,程序就崩溃了。我的问题是: 难道是操作系统会不停的检测,一个可执行映像用到的栈,有没有超过2进制文件(a.out或者PE)当中设置的栈的大小,如果超过了就崩溃?既然32位程序的栈空间可以很大,为什么要设定这样的限制呢? 超过限制就崩溃,OS在运行时是如何做到的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 栈太大做什么呢。增加系统开销啊。栈跟堆不一样,内存不够的时候估计不能在缓存开辟。而且显然这个栈应该是一段连续空间,应该不是链式的,这也必然限制它的大小啊。至于崩溃,不太确定,大概是越界以后覆盖了有用的内容了。 一开始,系统会给区域顶部两个页面调拨物理存储器,并把指针指向第一个页面,称为栈顶。第二个页面称为防护页面,系统永远不会给栈底页面调拨物理存储器(目的是为了保护栈内存操作不越界)。若代码访问了栈底后面的内存,将引起内存破坏,称为“栈下溢”。 内存破坏倒不一定会在当时就引起异常。引起异常的是读取了保护内存(试图对保护内存块读、写都会引起异常) 如何设置DNS自动获取,使用VC方式。高分求助。 帮小弟看看··· 数据库怎样获取字段名 SQL Server 不存在或访问被拒绝 请如何让Atl web service 在服务器端访问文件 关于用异步SOCKET传输文件,谁能帮我解答 新手提问,关于openGL 急聘图形开发设计人员!(没能力者勿扰!) 我在测试com时,报错:无法向注册表写入项,请问怎么办? VC++6升级VCSP4时不成功,打不开Access 2000的mdb文件。 这个是啥意思啊 MFC的 list vs 2005 安装部署问题,关于复选框
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货