※ 引述《sniffer@kkcity.com.tw ()》之銘言:
: ※ 引述《freaky.bbs@ptt.cc (jon)》之銘言:
: > C++ 的確可以自行撰寫 custom allocator 來配置記憶體,不過又回到老問題了,
: > unmanaged code 什麼事都可以做,要寫出一個不會有 heap fragmentation
: > 的 allocator 是有實際上的困難的,最佳化也是,對於無從預測的行為要如何
: > 最佳化?
: 你把最佳化當成是無上限的喔
: 最佳化並不是 cpu 花下去, code 就無限制的越來越快
: 就算是 profiler 把所有熱點都找了出來, 最佳化還是有限的
: 最多就是幫你省點 ram/cache, 其它的還是要人自己去改
: 最佳化並不能幫你更改程式的流程
: 何況 jit 的 profiler 只是把熱點用比較好的最佳化,
: 非熱點用直譯或省 cpu 的無最佳化編譯
: 目的只是為了省 jit 占的 cpu time, 讓 loading 快一點, 並不是要超越 compiler
: profiler 本身也是 cpu 的負擔
回文請不要斷章取義。我只是指出 JIT compiler 可以做到某些傳統 compiler
做不到的事。
: garbage collection 也不是萬能的, 雖然說像 java 沒有指標,
: 可以把記憶體全部重排搾出空間來, 但這樣 jit 產生的 code
: 也要全部重來, 所以實作上也不能如此, 寫 code 的人還是要注意分配記憶體
為什麼要重新 JIT?.net 的 GC 就是一種 compacting collector。
: clr 更是無法避免 heap fragmentation, 指標的值一但拿來用,
: 你要如何收回中間的 gap?
這個我前面就有提到了。但從寫程式的角度,原本就不該把一個物件 pin 太久。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.36.38