HW4(B)

閱讀資料

  • Only %rbx, %rsp, %rbp, and %r12-%r15 (and some others) are. These are called “call saved” or “non volatile” registers
  •  a table of usage of the registers(reference)
  • 若register被()圍起來,代表以該register內的值作為address,對該address操作
  • ex.   這裡r12為sp
 
  • Compile a simple object file, use objdump to get the resulting platform specific assembly, use the mmap system call to allocate some memory that you can write to AND execute, copy the instructions into that buffer, typecast it to a function pointer and finally call that.
  • 這裡定義r13放putchar的address,r14放getchar的address
  • 比較
  • Interpreter
  • 直接執行
  • Compiler
  • 將高階語言轉為組合語言
  • JIT
  • 將生成的機器碼(透過compiler)直接放到某塊JIT執行時期的記憶體(mmap),直接執行
  • 三者速度比:
  • Interpreter
  • 最慢,因為要不停的來回,時間複雜度為O(n),其他兩者為O(1)
  • Compiler
  • 如果只算執行時間,是最快的,但若考慮編譯時間,比JIT慢,因為多出I/O時間,把編好的檔案存起來再執行,而JIT把編好的內容,直接放入memory內,比JIT多一步,所以差異就出來了
  • JIT
  • 速度第二,但每次執行均須重編,若執行很多次也是不小的負擔。
  • 其實JIT在於常常修改code的話,是十分方便的(前提是如果code本身不大)。
 
 

改善JIT

  • 優化方案1
  • 根據教材,減少Instruction的數量是最直接的,所以想辦法合併+  -  >  <等冗贅的重複+1-1的過程
 
  • 優化方案2
  • 將該值直接設為0
 
  • 優化方案3
  • 可以直接看下圖....