【Windows核心编程笔记】第十六章 线程栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao3132453/article/details/90579051

每个线程都有自己的栈(一块地址空间区域),默认是1MB并调拨两个页面的存储器,这个值可以通过编译器配置修改,也可以在创建线程的时候通过参数指定(0为默认)

系统永远不会给区域底部的那个页面调拨存储器(保护进程使用的其他数据)

 

如果线程在栈溢出后继续使用栈,系统会抛出访问违规异常。如果访问违规异常是线程试图访问栈时引发的,此时系统会弹框提示并退出整个进程

应该使用SetThreadStackGuarante避免此情况,抛出EXCEPTOU_STACK_OVERFLOW,使程序能够处理栈溢出并恢复运行

 

栈下溢,代码会试图访问线程之外的内存,应该尽力避免

Void func()

{

       BYTE aBytes[100];

       aBytes[10000]=0; //栈下溢

}

 

C/C++运行库的栈检查函数

确保已经给线程栈调拨了物理存储器,编译器会在必要时生成代码来调用栈检查函数

/Gs开关 控制页面大小的阈值(绝大多数情况下不必设置)

猜你喜欢

转载自blog.csdn.net/zhao3132453/article/details/90579051