您的位置:首页 > 编程语言 > C语言/C++

Windows Via C/C++ 读书笔记 10

2009-06-14 09:51 369 查看
Windows Via C/C++ 读书笔记 10
Windows 内存架构(2)

1. 线程的栈

当一个线程被创建的时候,操作系统会给它的栈reserve一块区域,通常大小为1M,然后立刻在栈顶commit 2个pages。(见图1)
第一个Page是供线程立刻可以使用,第二个page是守护页面(guard page),当线程用完第一个页面的时候,需要更多栈内存会访问到守护页面,操作系统会得到通知。系统会再commit一个页面,把下一个页面作为新的守护页面。(注:非常类似前面讲的例子"reserve and commit memory")。



图1 stack初始状态
经过一段时间运行后,stack进入图2的状态。



图2 stack新状态
最底部的页面,图中0x08000000。是不会被线程使用的,一旦试图访问这个区域,操作系统会抛出一个EXCEPTION_STACK_OVERFLOW异常。如果在EXCEPTION_STACK_OVERFLOW异常抛出后还继续访问,系统会接管线程,直接关闭,弹出一个错误对话框。
这么做的目的是保证线程的内存使用控制在这个region里面,不会跑到别的线程的stack中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: