一.在對檔案操作的系統呼叫介面,並沒有提供獲取對檔案引用計數的資訊,所有想要獲取此資訊,有兩種方法:
1.在核心中新增乙個系統呼叫.將核心中檔案的引用count計數返回到應用層,這種比較麻煩.不推薦
2.遍歷整個系統中所有程序開啟此檔案的個數./proc/pid/fd/**, 以此來統計引用計數.lsof和fuser可能就是用的此方法,沒有做考證.
例子如下:
june_hou@ubuntu:~$ ps
pid tty time cmd
936 pts/9 00:00:00 bash
3586 pts/9 00:00:00 a.out
4533 pts/9 00:00:00 ps
june_hou@ubuntu:~$ ls -al /proc/3586/fd/ -al
total 0
dr-x------ 2 june_hou june_hou 0 jan 11 13:26 .
dr-xr-xr-x 9 june_hou june_hou 0 jan 11 13:26 ..
lrwx------ 1 june_hou june_hou 64 jan 11 13:26 0 -> /dev/pts/9
lrwx------ 1 june_hou june_hou 64 jan 11 13:26 1 -> /dev/pts/9
lrwx------ 1 june_hou june_hou 64 jan 11 13:26 2 -> /dev/pts/9
lrwx------ 1 june_hou june_hou 64 jan 11 13:26 3 -> /home/june_hou/test.log
lrwx------ 1 june_hou june_hou 64 jan 11 13:26 4 -> /home/june_hou/test.log
june_hou@ubuntu:~$ lsof test.log
command pid user fd type device size/off node name
a.out 3586 june_hou 3u reg 252,7 0 357 test.log
a.out 3586 june_hou 4u reg 252,7 0 357 test.log
自動引用計數
每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...
引用計數 copy on write
拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...
自動引用計數
使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...