滙編是一般程序員能為機器編程的底層語言(現代的CPU/GPU還會把指令再分解成微指令),所以學習滙編能讓程序員知道機器在軟件層面上的最底層操作。那麼,熟悉滙編後,可以更容易理解C/C++/OC這類語言如何在機器上執行。一些有經驗的程序員,看滙編時可以快速映射為C/C++代碼。這些經驗和知識有很多好處:
- 性能優化:在設計及編碼中能考慮到底層的執行方式,從而能編寫高性能的代碼。
- 深度調試:遇到一些崩潰或其他問題時,在沒有調試信息下也可以找到問題所在。有時候遇到編譯器本身的錯誤,單憑研究源代碼無發定位。
- 工具開發:可以實現AOT/JIT編譯、native調試器、內存/性能剖析工具等。
======================================================================
2014/3/21按评论补充
C/C++/OC虽然作为高级语言,其语言设计之所以是现在这样的,当中考虑了很多机器相关的因素。这些语言和设计为运行于虚拟机器或托管环境的语言不一样。
例如面向对象中的多态实现,C++的虚函数为什么要标注virtual,而Java的非静态、非final的方法就必然支持多态的?而OC的message dispatch会比虚函数慢么?它是怎么实现的?
又例如,学习C++时,可能会问引用是怎么实现的?如果只把它当作一个黑盒,就无法判定它相对于指针是否有额外的开销。
最后再举多一些C的例子吧,为什么在C中读写数组不会检查索引是否越界?这和C99中加入restrict关键字又有什么关系?
— 完 —
本文作者:Milo Yip
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 40 个回答,查看全部。
延伸阅读:
学汇编语言有什么好书籍?
学习编程语言最好的方法是什么呢?