[問題] C沒有auto garbage collector的原因

看板C_and_CPP作者 (豬腦包)時間14年前 (2012/01/17 09:05), 編輯推噓7(7026)
留言33則, 10人參與, 最新討論串1/1
不好意思~ 其實我爬了蠻多網路上的文章了~可是還是沒有非常懂~ "C只有conservative garbage collector~無法做到像java一樣~ 這是因為C裡面有像是Union, pointer arithmetic之類的東西" 這就是我看完一堆文章之後得到的心得~但是可能是因為我太笨>"< 沒有例子我真的不太懂為什麼有這兩種東西就無法做到完整的GC~ 可以請了解的大大各舉個GC無法handle的例子嗎? 能夠詳細解釋的話我會非常非常感激的~謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.210.112.38

01/17 10:06, , 1F
我看到的是說C/C++都沒有(想想合理),只有Java才有(沒碰
01/17 10:06, 1F

01/17 10:12, , 2F
其實C++有~就是我說的conservative GC~他無法處理所有的情
01/17 10:12, 2F

01/17 10:13, , 3F
況~只能處理最一般的~這也就是我想問得地方~^^
01/17 10:13, 3F

01/17 10:19, , 4F
我個人比較偏激的想法是,GC本身就是最大的Garbage ...
01/17 10:19, 4F

01/17 10:19, , 5F
樓上~我笑了XDDD
01/17 10:19, 5F

01/17 10:22, , 6F
但其實 java gc 是做在 system level, 靠 JVM 來實現,反
01/17 10:22, 6F

01/17 10:22, , 7F
過來想,譬如說在 Windows 上,像 CreateRemoteThread 這
01/17 10:22, 7F

01/17 10:23, , 8F
一類的事情發生,就不是 Compiler Level 可以處理的,與其
01/17 10:23, 8F

01/17 10:24, , 9F
說 C/C++ 沒有 GC,不如問 Windows / Linux 為啥沒有 GC?!
01/17 10:24, 9F

01/17 10:37, , 10F
我想是因為JVM只要處理Java~而Java本身就是type safe~所以
01/17 10:37, 10F

01/17 10:38, , 11F
處理起來很ok~但是linux這些系統~可以跑很多compiler~應該
01/17 10:38, 11F

01/17 10:38, , 12F
不太可能每種語言都cover到~這些都要寫在system level應該
01/17 10:38, 12F

01/17 10:39, , 13F
會是大工程~而且就回到我的問題~C就是一個例子~無法用GC來
01/17 10:39, 13F

01/17 10:39, , 14F
完整的handle~
01/17 10:39, 14F

01/17 10:41, , 15F
system level的意思是讓memory allocation成為syscall
01/17 10:41, 15F

01/17 10:41, , 16F
這就和語言無關了,能呼叫system call的都可以享受GC
01/17 10:41, 16F

01/17 10:44, , 17F
恩恩~原來如此~可是如果memory free部分無法做得很乾淨的
01/17 10:44, 17F

01/17 10:45, , 18F
話~這樣寫下去了~可能也用處不太大~
01/17 10:45, 18F

01/17 10:46, , 19F
大家可能還是會想說自己來比較實在~哈
01/17 10:46, 19F

01/17 11:22, , 20F
事實上非純OO的語言(有個最終base object的)
01/17 11:22, 20F

01/17 11:23, , 21F
通常也不會有個最泛用的GC機制,設計上的問題
01/17 11:23, 21F

01/17 11:56, , 22F
呃,lua和perl都有GC啊?
01/17 11:56, 22F

01/17 12:25, , 23F
Java是純OO?
01/17 12:25, 23F

01/17 13:16, , 25F
說到GC我想到這篇XD...
01/17 13:16, 25F

01/17 15:49, , 26F
其實就只是很單純的一件事實: 因為存在這些東西的關係
01/17 15:49, 26F

01/17 15:49, , 27F
你無法確定什麼東西是還在用的 什麼東西已經沒人用了
01/17 15:49, 27F

01/18 01:18, , 28F
我的想法是,有指標或指標的指標,GC本身就很難判定你指標
01/18 01:18, 28F

01/18 01:20, , 29F
dereference的東西到底是真的memory address還是只是垃圾
01/18 01:20, 29F

01/22 03:19, , 30F
a大提供的連結那篇「千萬別相信 Android 上的應用程式」太
01/22 03:19, 30F

01/22 03:23, , 31F
離奇了,真的是GC造成的嗎?非PhantomReference、WeakRefe
01/22 03:23, 31F

01/22 03:26, , 32F
rence的物件會被回收的話,違背了語言規格。值得追查成因
01/22 03:26, 32F

01/22 03:55, , 33F
我還是正向表列好了,strong reachable的物件居然被回收!?
01/22 03:55, 33F
文章代碼(AID): #1F5CbtiO (C_and_CPP)