精華區beta Programming 關於我們 聯絡資訊
※ 引述《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