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

博客介绍了线程栈的相关知识,包括每个线程有自己的栈,默认1MB并调拨两个页面存储器,可配置修改。阐述了栈溢出会引发访问违规异常,可使用SetThreadStackGuarante处理;还提到栈下溢应尽力避免,以及C/C++运行库的栈检查函数和/Gs开关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

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

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

 

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

Void func()

{

       BYTE aBytes[100];

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

}

 

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值