码迷,mamicode.com
首页 > 其他好文 > 详细

关于汇编

时间:2017-10-28 11:15:34      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:软件   设计   语言   nat   ++   变量   back   ogr   基本   

C/C++程序员一定要有考虑汇编、堆栈状态、符号表、编译器的能力。在离开学校开始求职的那一刻,如果尚不能做到这一点,那么要选择走C/C++这条路难度大大提升。如果自己写过编译器,哪怕是最简单的玩具型编译器,会有极大帮助。不然,没必要自找麻烦用C/C++。

如果写程序的时候心里明了堆栈状态、符号表状态、编译器状态,其实不会汇编也没什么。可惜,如果一个人不会汇编,要理解这三者实在是太难了。反过来,如果理解了这三者,基本上边写代码边人肉转汇编都是自然而然的事情。

- 不考虑符号表的,容易出Linker Error且看不懂Linker Errorr,容易分不清什么时候该include什么时候forward declare就行,对function signature、template、inline理解肯定也不会很到位。

- 不考虑堆栈状态的,看到指针就发怵,用不好Allocator,动态分配时分不清应该直接从堆上动态分配好,还是从栈上开buffer分配内存,会把栈上变量的指针bind给async callback函数。

- 不考虑编译器的,容易写出带二义性的代码,面对GCC的错误一半时间都得抓瞎,分不清runtime和compile time,于是template meta programming啥的也就别谈了。

- 不考虑汇编的,虚函数和非虚函数的继承,vptr,信号和中断处理函数一些诡异的特性,转型中的内存截断,强制类型转换,指针,线程切换,保存现场、上下文恢复也会理解不到位。

至于其他语言,人肉汇编不是必须的技能。毕竟,那些高级语言,存在的目的就是为了对底层进行抽象。如果对汇编有所了解,那很好,某个语言的某一个独特feature为什么这么设计,支持这个特性的代价是什么,会一目了然。

而C/C++,在我看来是特殊的,这两个语言(在我看来)完全是为了“更快更好地 用现代软件工程的方法 写出接近汇编的 细粒度 高性能代码” 而存在的。所以,C/C++程序员必须通晓汇编
    

关于汇编

标签:软件   设计   语言   nat   ++   变量   back   ogr   基本   

原文地址:http://www.cnblogs.com/enyala/p/7745816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!