重点linux源码分析.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在《重点Linux源码分析》中,我们探讨的是Linux内核的源代码,这个核心是用GNU的C语言编写的。GNU C语言不仅遵循ANSI C标准,还包含了一些扩展和特殊技巧,这些可能会对初次接触内核源码的读者造成一定的困扰。此书并非专门讲解GNU C语言,而是针对Linux内核源码的分析,因此只对影响阅读和理解的关键点进行简要介绍。 GCC(GNU Compiler Collection)从C++中引入了"inline"关键字,用于声明内联函数。内联函数与宏定义类似,但更安全,具有独立性,有助于调试。在未开启优化编译时,内联函数会保持其函数形式,方便调试;而在优化编译后,它们会被插入到调用位置,提升运行效率。由于内联函数的广泛使用,很多代码从.c文件迁移到了.h头文件中。 另外,为了适应64位CPU架构,如Alpha,GCC引入了"long long int"这种新的基础数据类型。同时,GCC支持一些"属性描述符",如"aligned"和"packed",用于控制内存对齐和结构体紧凑性。为避免与已有的非保留字冲突,GCC允许使用双下划线"__"来包围这些新的保留字,例如"__inline__"等价于"inline","__asm__"等价于"asm"。 GCC还引入了一个"attribute"保留字,用于定义对象的特定属性。例如,使用"__attribute__((packed))"可以确保结构体成员紧凑排列,不考虑对齐规则。这样可以避免因结构体成员间的空洞而产生的问题。 Linux内核只能使用GCC进行编译,因为内核利用了GCC的这些扩展特性。随着时间的推移,Linux内核的新版本可能依赖于GCC的更新功能,这就导致了内核版本与GCC版本之间的依赖关系。尽管这可能影响内核的可移植性,但考虑到代码质量和GCC的广泛支持,这种影响被认为是可以接受的。实际上,GCC已经支持多种CPU架构,并且可以进行交叉编译。 在Linux内核源码中,内联函数和宏定义共同存在。宏定义在某些场合仍然是必要的,例如在fs/proc/kcore.c中的DUMP_WRITE宏定义。宏定义可以提供灵活的代码替换,但可能带来理解和调试的复杂性。书中通过实例解释了宏定义的工作原理,帮助读者更好地理解内核源码中的宏操作。 总而言之,《重点Linux源码分析》深入探讨了Linux内核源码中使用的GNU C语言扩展和编程技巧,包括内联函数、数据类型、属性描述符以及宏定义的使用,这些都是理解和分析Linux内核的关键知识点。通过学习这些内容,读者可以更有效地阅读和理解复杂的Linux内核源代码。
剩余11页未读,继续阅读
- 粉丝: 6874
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助