windows线程栈

以下内容引述《windows核心编程》

线程栈

当系统创建线程时,会为线程栈预定一块地址空间区域(每个线程都有自己的栈),并给区域调拨一些物理存储器。默认情况下,系统会预定1MB的地址空间并调拨2个页面的存储器。
也可以通过编译器选项控制 MicroSoft C++编译器的/F选项,或者MSVC链接器的/STACK 选项
/Freserve
/STACK:reserve[, commit]
链接器会将想要的栈大小写入PE文件头中。
也可以通过调用CreateThread或者_beginthreadex函数时参数指定大小。

在预定地址空间区域后,系统会给区域顶部(即地址最高)的两个页面调拨物理存储器。在让线程开始执行之前,系统会把线程栈的指针指向区域顶部的那个页面的末尾(该地址非常接近0x08100000)
这个页面就是线程开始使用栈的地方。区域顶部往下的第二个页面被称为防护页面(guard page),随着线程调用越来越多的函数,调用树也越来越深,线程也需要越来越多的空间。

线程地址空间

线程区域创建时的空间布局
完整的线程堆栈区域
完整的堆栈
用尽的堆栈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值