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

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

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

 

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

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

 

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

Void func()

{

       BYTE aBytes[100];

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

}

 

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值