3内核对象
今天坐著無聊,突然想到,如果A進(jìn)程分配足夠多的內(nèi)核對(duì)象后,過一段時(shí)間A還能分配內(nèi)核對(duì)象嗎?,猜想應(yīng)該是可以的,因?yàn)閮?nèi)核對(duì)象空間是由內(nèi)核分配的,
所以做了個(gè)小實(shí)驗(yàn):
我們都知道,創(chuàng)建線程內(nèi)核對(duì)象引用計(jì)數(shù)為2,線程退出減一,closehandle減一,所以不調(diào)用closehandle,那么內(nèi)核對(duì)象就會(huì)存在,直接用個(gè)工具Process Explorer
直接上代碼:
static DWORD WINAPI WinMain(LPVOID lp);
?
?
好吧,我很無聊的用了WinMain函數(shù)做為線程入口函數(shù),這表明線程函數(shù)可以任意命名,
先介紹下ProcessExplorer,
選中Show Lower Pane后,出現(xiàn)Type,Name(下面部分),這就是句柄信息,
選中Demo1.exe
運(yùn)行上面的代碼:
我們發(fā)現(xiàn)名稱為Thread有一堆了,這都是線程內(nèi)核對(duì)象,最后分配不了了,彈出下面的框;
,這時(shí)是不是意味著Demo1.exe進(jìn)程不能再分配內(nèi)核對(duì)象了?,把代碼改下:
void CDEMO1Dlg::OnBnClickedButton1() {int i=0;while (true){HANDLE m_h = CreateThread(NULL, 0, WinMain, this, 0, NULL);if (!m_h){CString sz;sz.Format(L"共成功分配了%d個(gè)內(nèi)核對(duì)象",i);AfxMessageBox(sz);break;} i++;} }多次運(yùn)行后,我們發(fā)現(xiàn),過一段時(shí)間Demo1.exe進(jìn)程還能再分配內(nèi)核對(duì)象了,估計(jì)系統(tǒng)從其他地方又?jǐn)D出分配空間了,沒完沒了了!
轉(zhuǎn)載于:https://www.cnblogs.com/hgy413/archive/2012/04/04/3693541.html
總結(jié)
- 上一篇: UVA 10534 - Wavio Se
- 下一篇: ubuntu amd 64bit 安装