Windows Via C/C++ 读书笔记 10
2009-06-14 09:51
369 查看
Windows Via C/C++ 读书笔记 10
Windows 内存架构(2)
第一个Page是供线程立刻可以使用,第二个page是守护页面(guard page),当线程用完第一个页面的时候,需要更多栈内存会访问到守护页面,操作系统会得到通知。系统会再commit一个页面,把下一个页面作为新的守护页面。(注:非常类似前面讲的例子"reserve and commit memory")。
图1 stack初始状态
经过一段时间运行后,stack进入图2的状态。
图2 stack新状态
最底部的页面,图中0x08000000。是不会被线程使用的,一旦试图访问这个区域,操作系统会抛出一个EXCEPTION_STACK_OVERFLOW异常。如果在EXCEPTION_STACK_OVERFLOW异常抛出后还继续访问,系统会接管线程,直接关闭,弹出一个错误对话框。
这么做的目的是保证线程的内存使用控制在这个region里面,不会跑到别的线程的stack中去。
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中去。
相关文章推荐
- Windows Via C/C++ 读书笔记 3
- Windows Via C/C++ 读书笔记 12 Heap(堆)
- Windows Via C/C++ 读书笔记 4 线程调度 优先级
- Windows Via C/C++ 读书笔记 5 用户模式的线程同步
- 《Windows Via C/C++》读书笔记之dll加载时刻
- windows via c/c++ 读书笔记
- Windows Via C/C++ 读书笔记 6
- 《Windows Via C/C++》读书笔记之dll入口函数
- Windows via C/C++ —— 进程(一)读书笔记
- Windows via C/C++ 5th 读书笔记(Ⅰ)
- Windows via C/C++ 学习(10)子进程
- Windows Via C/C++ 读书笔记 13 动态链接库基础DLL Basics
- 《Windows Via C/C++》读书笔记之dll隐式链接
- Windows Via C/C++ 读书笔记 2
- Windows Via C/C++ 读书笔记 9 Windows Memory Architecture
- Windows Via C/C++ 读书笔记
- Windows via C/C++ 5th 读书笔记(Ⅱ)
- Windows Via C/C++ 读书笔记 11
- 《Windows Via C/C++》读书笔记之dll导出与加载
- Windows Via C/C++ Part Ⅰ Chapter4: 进程—第一个Windows程序(3)