HeapCreate()中的HEAP_GENERATE_EXCEPTIONS选项
来源:互联网 发布:linux sftp命令 编辑:程序博客网 时间:2024/05/16 05:08
HeapCreate() 函数在创建私有堆时可以使用HEAP_GENERAT_EXCEPTIONS选项,以使得创建失败时函数抛出异常,而非简单返回NULL。
在《win32汇编》一书中给出的代码是:调用HeapCreate()后,判断eax && (eax < 0c0000000h)是否为真,为真则创建成功。
c0000000h容易理解,在《Windows Via C/C++》一书中,x86 32-bit Windows中内核模式代码从0x80000000处开始,x86 32-bit Windows with 3GB User-Mode中内核模式代码从0xC00000000处开始。为了保持在两种平台的代码一致,从0xc0000000处开始能保证都是内核所在的地方,不会与用户模式的地址空间重叠。所以将错误代码定义成大于C0000000H。将eax与之比较,如果小于此值则表示分配成功,大于等于表示分配失败。
现在的问题是:指定HEAP_GENERATE_EXCEPTIONS选项后,如堆分配失败会产生异常,但这里没有异常的处理器,而只是简单地用EAX来做比较处理。
难道Windows自动做了异常处理,并将错误代码写入EAX?
这是一个比较合理的解释,不过没有根据,还是将Windows的异常处理章节看过之后,再回过来处理这个问题吧。
- HeapCreate()中的HEAP_GENERATE_EXCEPTIONS选项
- HeapCreate()
- HeapCreate
- HeapCreate第三个参数dwMaximumSize
- 删除启动选项中的选项
- JAVA中的调试选项
- Bash中的shopt选项
- Makefile中的-D选项
- JVM中的ExplicitGCInvokesConcurrent选项
- sge中的windows选项
- Swift中的选项集合
- 堆分配函数:HeadAlloc , GetProcessHeap , HeapCreate
- 工具中的文件夹选项不见了!
- vs编译选项中的宏
- PB中的参数选项卡
- 删除打开方式中的选项
- telnet中的-8E选项
- 长按ExpandableListView中的选项
- C#3.0规范
- 關於WEB服務.
- 小病自己治 轻松解决奥林巴斯XD卡故障
- c语言中的注释
- 测试了一把 XslTransform 的性能
- HeapCreate()中的HEAP_GENERATE_EXCEPTIONS选项
- SQL2005中的事务与锁定(三)
- oracle网络配置listener.ora、sqlnet.ora、tnsnames.ora
- MM配置路线+事务码
- Swing框架之Renderer(三)
- lamada形式处理递归的通用方法
- linux修改系统时间最佳方法
- uncompress the tar.gz files in Ubuntu
- 【本文已迁移到“程序员文摘” http://programmerdigest.cn/category/lajp】LAJP系列教程-第四部分-增删改查示例程序