读Advanced C and C++ Compiling
2016-07-10 14:20
405 查看
这周读了一本名为《Advanced C and C++ Compiling》的书,其主要关注点也不是传统的编译理论上,它主要关注与平台相关程序编译细节以及链接装载上。
C是一门“简单”的语言,其语言核心元素短小精悍,不会有任何隐藏性能损失的语法构造,效率一流,但是标准中没有定义很多现代语言的动态特性也为很多工作带来了麻烦。尤其是动态加载和插件横行的今天,反射等机制的缺乏让C程序员不得不依赖于平台相关的复杂技术来满足这类需求。一旦牵涉到平台相关,整个问题就变得非常复杂了。因为不同平台虽然都有动态库或者共享库支持,但是毕竟提供了不同的接口,具体的概念与技术细节都不太一样,因此为了让自己的程序可以跨平台,必须付诸更多努力.
如果说C语言得益于语法元素的简单,因此链接和装载处理还算简单(除了动态装载技术),那么C++就是一个噩梦。C++语言的复杂性众所周知,但那只是语法层面的,其带给链接和装载的挑战远远大于编译技术本身。只要大家想象一下,作为两门不同的语言,C++生成的库可以被C语言程序直接使用(C++库接口需要进行一些封装),也就是两者是完全二进制兼容的,这个难度就难以想象了。更不要提C++各种语法元素需要的链接装载支持了(比如函数重载、全局对象构造、模板支持等)。
这本书主要对C/C++的链接装载技术细节进行了阐述,以Linux平台的ELF为主,也介绍了Windows平台的一些工具与技术细节。和侧重理论和细节分析的《链接器与装载器》一书不同,该书偏重于对概念进行形象的阐述,并介绍一些具体的工具和技术的使用方法与注意事项。而且《链接器与装载器》很多内容过于陈旧(虽然讲了许多源头性的概念与技术),相比来说此书则非常贴近现在的程序开发认知的。
比较令人震惊的是该书作者是电气工程师出身,而非计算机科班人员。不过也因为如此,他更加注重技术的实际应用,而不是大篇幅的概念阐述,读者是否喜欢这种风格则见仁见智了。虽然该书讲的知识点略为散乱,也不够深入,但是对于初学者来说也是一本不可多得的好书了。
C是一门“简单”的语言,其语言核心元素短小精悍,不会有任何隐藏性能损失的语法构造,效率一流,但是标准中没有定义很多现代语言的动态特性也为很多工作带来了麻烦。尤其是动态加载和插件横行的今天,反射等机制的缺乏让C程序员不得不依赖于平台相关的复杂技术来满足这类需求。一旦牵涉到平台相关,整个问题就变得非常复杂了。因为不同平台虽然都有动态库或者共享库支持,但是毕竟提供了不同的接口,具体的概念与技术细节都不太一样,因此为了让自己的程序可以跨平台,必须付诸更多努力.
如果说C语言得益于语法元素的简单,因此链接和装载处理还算简单(除了动态装载技术),那么C++就是一个噩梦。C++语言的复杂性众所周知,但那只是语法层面的,其带给链接和装载的挑战远远大于编译技术本身。只要大家想象一下,作为两门不同的语言,C++生成的库可以被C语言程序直接使用(C++库接口需要进行一些封装),也就是两者是完全二进制兼容的,这个难度就难以想象了。更不要提C++各种语法元素需要的链接装载支持了(比如函数重载、全局对象构造、模板支持等)。
这本书主要对C/C++的链接装载技术细节进行了阐述,以Linux平台的ELF为主,也介绍了Windows平台的一些工具与技术细节。和侧重理论和细节分析的《链接器与装载器》一书不同,该书偏重于对概念进行形象的阐述,并介绍一些具体的工具和技术的使用方法与注意事项。而且《链接器与装载器》很多内容过于陈旧(虽然讲了许多源头性的概念与技术),相比来说此书则非常贴近现在的程序开发认知的。
比较令人震惊的是该书作者是电气工程师出身,而非计算机科班人员。不过也因为如此,他更加注重技术的实际应用,而不是大篇幅的概念阐述,读者是否喜欢这种风格则见仁见智了。虽然该书讲的知识点略为散乱,也不够深入,但是对于初学者来说也是一本不可多得的好书了。
相关文章推荐
- leetcode_c++:哈希: Isomorphic Strings(205)
- Kruskal最小生成树
- 杂谈c++与java
- 贪心算法-Huffman编码
- leetcode_c++:哈希:Count Primes (204)
- 洛谷1341 无序字母对 解题报告
- C++位运算知识点
- C语言实验——保留字母
- C语言 百炼成钢25
- C语言atoi()函数:将字符串转换成int(整数)
- C语言link()函数:建立文件连接
- C语言lseek()函数:移动文件的读写位置
- 求两圆相交部分面积 c++
- c++中的.hpp文件
- neuq oj C++ 二维数组1064: 谭浩强C语言(第三版)习题8.4
- 背包问题
- C++11中的进行线程同步的方法
- 第五章 C++的内存模型和原子操作
- C++11并发编程实战
- Sum of Two Integers