现在的位置: 首页 > 综合 > 正文

内核对象浅谈

2013年08月29日 ⁄ 综合 ⁄ 共 544字 ⁄ 字号 评论关闭

 今天我想浅谈内核对象.

内核对象是一块内存区域,它实际上是一个数据结构,只能由操作系统访问,里面包含着一些ID值和引用计数等。

创建内核对象:

当线程里面调用一个创建内核对象的函数时,就为这个内核对象分配一个内存区域,接着在线程的句柄表里面找到位置存放内存对象的指针,这里要说明一个,句柄表是线程资源的一个管理表,里面存放着该线程调用的内核对象,当我们创建内核对象时,会返回一个句柄,句柄就是该内核对象在该句柄表的索引。线程是通过这个索引找到内核对象的指针,之后再对内核对象进行操作的,所以线程的句柄是不能给另一个线程调用的,会发生不可预知的后果。提醒一个,创建的内核对象都会改变其引用计数,i++,而若是共享的话,就在另一个线程里面保存该对象的指针,之后也要++

销毁内核对象:

销毁内核对象时我们通常会调用CloseHandle(),此时会把内核对象的引用计数--,倘若计数为0则销毁对象。但是,当我们忘了调用CloseHandle()时,是不是意味着内核对象内存泄露了?答案是不一定。在线程调用期间,由于我们没有关闭,内核对象是一直存在的,但是,当线程调用完毕时,系统会访问句柄表,倘若里面存在有效项,会逐一关闭,计数--,如果计数到0就销毁,所以在线程结束后一定不会出现内核对象内存泄露。

抱歉!评论已关闭.