正規的方法可以用 zwqueryobject 。但是該函式用起來比較麻煩。
事實上還有乙個方便的函式
void obreferenceobject(
_in_ pvoid object
);return value
obreferenceobject returns a value that is reserved for system use. drivers must treat this value as void.
開啟反彙編一看:
nt!obfreferenceobject:
8086bf7c 803de0088a8000 cmp byte ptr [nt!kienabletimerwatchdog+0xafc (808a08e0)],0
8086bf83 56 push esi
8086bf84 8d71e8 lea esi,[ecx-18h]
8086bf87 7408 je nt!obfreferenceobject+0x15 (8086bf91)
8086bf89 6a01 push 1
8086bf8b 56 push esi
8086bf8c e8a3feffff call nt!ntfreevirtualmemory+0x14ea2 (8086be34)
8086bf91 33c0 xor eax,eax
8086bf93 40 inc eax
8086bf94 f00fc106 lock xadd dword ptr [esi],eax
8086bf98 40 inc eax
8086bf99 5e pop esi
8086bf9a c3 ret //eax = new reference count
雖然該函式的返回值宣告為void,事實上 就是引用計數。
物件引用 計數 原理
includeusing namespace std 主要思想,cptrint相當於管理int 的智慧型指標,能控制複製中記憶體懸掛等問題。該物件內部有乙個cptrcount類,該類負責記錄拷貝的次數,儲存共享記憶體的指標。該類的拷貝構造負責,拷貝複製其資料 引用次數 共享記憶體指標。不負責處理引用...
自動引用計數
每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...
引用計數 copy on write
拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...