精華區beta Programming 關於我們 聯絡資訊
※ 引述《freaky@bbs.ee.ntu.edu.tw (jon)》之銘言: > .net 程式並不是直譯式程式,而是被編譯了兩次經過兩次最佳化的程式。 > 至於 Java 剛出來的時候是用 VM 直譯 bytecode, 現在也多半是用編譯的了。 這個我自己在前面的文章就有說過了喔, 上篇之所以直接指名直譯, 是指後半段的直譯執行部分。 另外 MS 的 .NET 我是在 beta 的時候用過它的 C#, 其實也已經建立了不少概念, 倒不至於完全不懂, 所以對 .NET 初學者的說明倒是可以省下來。 我不清楚的其實只有它 CLR 的設定方法和微調方式, 以及詳盡的實作細節。 > : 指定 CPU 型號分別編譯, > : 然後只釋出 binary 檔依然是可行的, > : 要不就是現在比較常見的方式:讓關鍵部分的 DLL 檔可抽換, > : 讓 user 選擇 SSE、SSE2、SSE3 等不同版本進行下載或直接從 CD 安裝, > : 當然這也是只有講 CPU 的部分。 > 這些都需要使用者有相當的知識,我覺得不是很實際。 我想使用者至少會知道自己的 CPU 是什麼, 就算不知道的話也能寫個小程式替使用者判斷。 > 傳統 compiler 能做的最佳化 managed compiler 也能做,而且是分兩階段 > 在有更充分資訊的情況下做,你可以去試試 C++/CLI。.net 的 managed heap 可以做,但是沒辦法全部做,也沒辦法做到很完美, 不是不可以而是不能, 其實現在傳統的 compiler 在 machine-dependent 的部分耗費最多編譯時間, 如果一個傳統 compiler 在最佳化選項全開的情況下需要編譯 5 分鐘的程式, 其中至少有 3.5 至 4 分鐘是在進行 machine-dependent 最佳化, 而把這 3.5 至 4 分鐘的時間平均分攤在執行期也是很大的開銷, 這就是可以做但是不能做的原因。 何況 JIT compiler 並不是把編譯的結果完全保留下來直到程式結束, 是以某些 policies 把編譯過的 native code 暫時 cache 起來, 當運氣不是很好的時候還是會發生接近純直譯速度的狀況, 甚至更差。 > 只有在 pinned pointer 正指向一塊記憶體,而開始進行 garbage collection > 時才會產生 heap fragmentation,所以一般情況下存取 managed heap 是比 > unmanaged heap 來得有效率。即使架構上造成了一些 penalty,也有一些 > 設計特性超越傳統程式的地方,因此 managed 程式的效能並非完全不可能 > 比傳統程式好。 這個部分如同之前我所說的是 library issue, 和傳統 compiler 的行為其實完全無關, 無論是 C 的 malloc()/free() 函式或是 C++ 的 new/delete operator, 實際對 heap 的操作行為都在於背後的 library 撰寫方式, 因此要製作一個類似 managed heap 的 library 並不困難, 一樣可以很高興的狂 malloc()/new 免用 free()/delete, 其它傳統語言的狀況我是不知道, 不過傳統的 C/C++ compiler 從不幫 user 管理 heap, 實際行為取決於 libc 和 libstdc++ 的實作內容, 高興的話也能直接選用別套 heap managing library, 因此這一點倒不至於成為 unmanaged heap 架構做不到的事。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-137-182.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 -- * Modify: tinlans 06/03/07 19:23:10 <218-171-137-182.dynamic.hinet.net>