例如,我有个函数调用:void f(...){
int buf[1000000];//栈上溢出
...
}
程序运行到f的时候,栈上溢出,程序崩溃。我上网查了一下说,VC编出来的windowsPE文件里面,有一个字段是设置栈的大小的。我的问题是: 难道VC编出来的程序在运行过程中,会不断的让OS帮它检查当前堆栈的大小是不是超出了这个值?(1)如果每运行一个堆栈操作都要做检查,那岂不是太低效了?
(2)如果不是的话,那windows又如何知道一个程序什么时候栈的大小越界了呢?这似乎是个两难问题啊,还请高手指点!
int buf[1000000];//栈上溢出
...
}
程序运行到f的时候,栈上溢出,程序崩溃。我上网查了一下说,VC编出来的windowsPE文件里面,有一个字段是设置栈的大小的。我的问题是: 难道VC编出来的程序在运行过程中,会不断的让OS帮它检查当前堆栈的大小是不是超出了这个值?(1)如果每运行一个堆栈操作都要做检查,那岂不是太低效了?
(2)如果不是的话,那windows又如何知道一个程序什么时候栈的大小越界了呢?这似乎是个两难问题啊,还请高手指点!
解决方案 »
- 如何将十六进制数转化为字符串?
- 冰天雪地跪求高手帮忙,关于socket套接字
- 有人使用过easyhook这个库不?
- 在windows下用GCC如何编译驱动?
- 已经建立了一个vc工程,如何修改工程名?
- gdi+ DrawString 在黑白图片上输出文本怎么不对,同样的代码多次执行之后,还会抛出异常(仅黑白图片时)?
- 使用ado的时候怎样将所有类型的数据当成同一种类型来处理?譬如能不能把所有类型的数据都当成blob类型来处理?
- 从CStatic派生的子类如何才能响应鼠标事件?
- MFC中怎么extern union?
- 区域的响应
- 创建DLL时遇到两个问题~ 静态数据成员string与向量vector的警告。
- 文件操作
int 范围是到-32768~32767